首页 > 解决方案 > 动态加载库的 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 的维护者的说法,问题出在 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 插件与我的项目无关。

标签: javascriptnode.jswebpackeslinttypescript-eslint

解决方案


推荐阅读