javascript - 动态加载库的 Webpack 捆绑错误
问题描述
我正在尝试从 Node.js 控制台应用程序中使用 ESLint,但是当我尝试将其扩展为也处理 TypeScript 时,出现错误:
Error: Failed to load parser '@typescript-eslint/parser' declared in 'BaseConfig': Cannot find module 'D:\my-application-path\node_modules\@typescript-eslint\parser\dist\index.js'
at webpackEmptyContext (webpack://my-application/./node_modules/@eslint/eslintrc/lib/_sync?:2:10)
at ConfigArrayFactory._loadParser (webpack://my-application/./node_modules/@eslint/eslintrc/lib/config-array-factory.js?:934:102)
at ConfigArrayFactory._normalizeObjectConfigDataBody (webpack://my-application/./node_modules/@eslint/eslintrc/lib/config-array-factory.js?:724:43)
at _normalizeObjectConfigDataBody.next (<anonymous>)
at ConfigArrayFactory._normalizeObjectConfigData (webpack://my-application/./node_modules/@eslint/eslintrc/lib/config-array-factory.js?:665:20)
at _normalizeObjectConfigData.next (<anonymous>)
at ConfigArrayFactory.create (webpack://my-application/./node_modules/@eslint/eslintrc/lib/config-array-factory.js?:460:16)
at createBaseConfigArray (webpack://my-application/./node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js?:98:48)
at new CascadingConfigArrayFactory (webpack://my-application/./node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js?:234:30)
at new CLIEngine (webpack://my-application/./node_modules/eslint/lib/cli-engine/cli-engine.js?:569:36) {
code: 'MODULE_NOT_FOUND'
}
路径显然很糟糕,因为它应该在 webpack 中。但是,我尝试了以下方法:
- 重写 ESLint 的 eslintrc 的 config-array-factory.js(引发上述错误的文件)中的路径解析以使用相对路径。这并没有解决问题,错误仍然发生。
- 跳过 ESLint 的 eslintrc 的 config-array-factory.js 中的路径解析,并使用 webpacked 路径的常量路径(“webpack://ts-eslint-node/./node_modules/@typescript-eslint/parser/dist/index.js”) js”)。这并没有解决问题,错误仍然发生。
- 跳过 ESLint 的 eslintrc 的 config-array-factory.js 中的路径解析并使用现有路径。这并没有解决问题,错误仍然发生。
根据 ESLint 的维护者的说法,问题出在 webpack 中(https://github.com/typescript-eslint/typescript-eslint/issues/3917)。但是,我认为问题不在于 webpacking 过程,而在于模块本身,因为我的用例可能不是通常的用例。
我的 package.json:
package.json
{
//...
"dependencies": {
"@typescript-eslint/eslint-plugin": "^4.31.1",
"@typescript-eslint/parser": "^4.31.1",
"eslint": "^7.31.0",
"typescript": "^4.4.3",
//...
},
//...
}
我的 Node.js 应用程序:
const options = {
baseConfig: {
env: {
es6: true,
},
parser: "@typescript-eslint/parser",
plugins: ["@typescript-eslint"],
},
};
const eslintProgram = new eslint.ESLint(options);
eslintProgram.lintFiles(globals.getOption('inputList')).then(results => {
console.log("Yay");
});
我的 webpack 配置非常基本,我使用节点加载器:
const path = require('path');
const webpack = require('webpack');
module.exports = {
target: "node",
node: {
__dirname: false,
},
entry: "./main.js",
output: {
filename: "main.js",
path: path.resolve(__dirname, "dist"),
clean: true,
},
module: {
rules: [
{
test: /\.node$/,
loader: "node-loader",
options: {
name: "[name].[ext]"
}
},
]
},
}
谁能帮我我错过了什么?注意,我使用 ESLint 和 TypeScript-ESLint 作为库,我不是要 lint 我自己的源代码,所以 Webpack ESLint 插件与我的项目无关。
解决方案
推荐阅读
- typescript - typegraphql:使用变量时操场上的参数错误
- javascript - SetTimeout 和 SetImmediate 与 console.log
- python - 如何根据熊猫中的组最大值将一列的标签分配给新的一列
- javascript - 如何将传单矢量图保存到图像
- html - 想要内容以父级为中心,但要灵活包装
- java - 如何检查嵌套循环是否完成?
- javascript - 如何使用 nonce 将内联事件处理程序列入白名单
- android - 如何根据日期获取 Firebase 数据库保存的数据?
- php - 如何在 php 中提交时获取包含多个选项的行的值?
- java - 用于 lucene 搜索的 Rest API