javascript - 从 node_modules 导入枚举时,webpack encore 失败
问题描述
我正在尝试使用我在另一个项目中创建的库中的一些枚举。该库由 Vue 和 typescript 制作,与 rollup 捆绑,项目由 Synfony 制作,前端也是 Vue 和 typescript,由 Webpack Encore 构建。
该库是我项目的依赖项,因此我尝试像这样导入枚举:
import { MyEnum } from 'myLibrary/src/enum/MyEnum';
枚举看起来像这样
// node_modules/myLibrary/src/enum/MyEnum.ts
export enum MyEnum {
One = 'one',
Two = 'two',
Three = 'three'
}
但是当我构建时,我得到了这个错误(使用 Symfony 的 Webpack Encore):
ERROR Failed to compile with 1 errors 4:37:05 PM
Error loading ./node_modules/myLibrary/src/enum/MyEnum.ts
FIX To process TypeScript files:
1. Add Encore.enableTypeScriptLoader() to your webpack.config.js file.
我显然已经enableTypeScriptLoader()
在 webpack.config.js 中添加了,我不知道如何解决这个问题。
如果我在我的项目中创建相同的枚举文件并导入它,它可以工作,但我必须将它保存在我的库中并且我不想重复代码。我以同样的方式从同一个库中导入接口,它工作正常。
我尝试了不起作用的东西:
export const enum
有点工作,但我得到了TS2475: 'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment or type query.
错误,我必须在另一个对象中重新声明枚举才能在我的模板中使用它:/export declare enum
但仍然得到Add Encore.enableTypeScriptLoader()
错误
知道如何解决这个问题吗?
编辑
我的浏览器中有另一条错误消息,其中添加了一些信息:
Module parse failed: Unexpected token (4:7)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
> export enum MyEnum {
| One = 'one',
| Two = 'two'
我还测试在使用 Vue Cli 制作的新项目中从同一个库中导入相同的枚举,并且我没有错误。我很确定问题来自 Webpack Encore。
解决方案
找到解决方案,此 Webpack Encore 问题中的一些详细信息:https ://github.com/symfony/webpack-encore/issues/1060
这是修复:
allowTsInNodeModules
1 /添加enableTypeScriptLoader
选项:
Encore.enableTypeScriptLoader((options) => {
options.allowTsInNodeModules = true;
});
- 2/更新规则以更改
exclude
排除 node_modules 的选项,并排除 node_modules 但我自己的模块(我自己的模块所在@myCompany
的 node_modules 中的文件夹在哪里。
Encore.configureLoaderRule('typescript', (rule) => {
rule.exclude = /node_modules\/(?!@myCompany)/;
});
这会在编译时生成警告,但目前这是我发现解决此问题的唯一方法。
推荐阅读
- c# - 将数据与实体框架绑定时如何处理不存在的列?
- angular - 带有枚举和复选框的 Angular 8 反应式表单
- python - 如何使用 tensorflow 从亚马逊下载数据集
- macos - 获取运行进程的路径,当路径包含空格时
- android - postDelayed 为运行代码执行两次
- selenium - org.openqa.selenium.NoSuchElementException 没有这样的元素:无法找到元素
- windows - Ansible 的 Windows 更新
- git - git reset --hard 不丢失历史
- jmeter - JMeter - Webdriver - 多个 iframe
- php - 如何在文件中保存多个表单输入