webpack“externals”选项出现意外字符“@”

ksh*_*ine 6 javascript typescript webpack

我发现了很多关于 webpack 中发生的“意外字符‘@’”的内容,但没有一个与externalswebpack 选项的错误具体相关或有帮助。我以前用过这个,无论有没有@符号,都没有任何问题,所以我不知道为什么 webpack 现在变得暴躁。

const TerserPlugin = require('terser-webpack-plugin');

module.exports = () => {
  return {
    mode: 'production',
    target: 'node',
    entry: './build.ts',
    output: {
      path: __dirname,
      filename: `build.js`
    },
    node: {
      __dirname: false,
      __filename: false,
    },
    resolve: {
      extensions: ['.ts', '.js'],
      mainFields: ['es2015', 'module', 'main', 'browser']
    },
    module: {
      rules: [
        {
          test: /\.ts$/i,
          loader: 'ts-loader',
          options: { configFile: 'tsconfig-build.json' },
          exclude: [/\/node_modules\//]
        }
      ]
    },
    externals: ['chalk', '@tubular/util'],
    optimization: {
      minimize: true,
      minimizer: [new TerserPlugin({
        terserOptions: {
          mangle: false,
          output: { max_line_len: 511 }
        }
      })],
    },
  };
};
Run Code Online (Sandbox Code Playgroud)

@ 是我想要排除的包名称的必要部分,而且我之前已经排除过此类包,所以这既神秘又烦人。

有人知道这里出了什么问题吗?

ksh*_*ine 1

我找到了答案,但这肯定不是我正在寻找的答案

如果我使用该包webpack-node-externals,我可以node_modules像这样外部化所有内容:

const nodeExternals = require('webpack-node-externals');

 // ...

    externalsPresets: { node: true },
    externals: [nodeExternals()],
Run Code Online (Sandbox Code Playgroud)

在这种特殊情况下,排除所有节点外部恰好很好,因此webpack-node-externals解决了我眼前的问题。但如果我想更有选择性,并且想要排除名称中带有@的包,我仍然有一个谜团。