Webpack:对于某些模块,保留 'require' 语句不变

6
目标:对于一些与模式P匹配的库,让webpack按原样发出/编译require语句。
示例:
  1. 假设我有一个mylib,我想让它通过as-is,这样在运行时require可以正常工作。

  2. 和这样的代码。

var b = require("./some.stuff.that.webpack.should.inline"); a = require('mylib/should/stay/a/Require');

我希望输出看起来像这样

  /******/ ([
  /* 0 */
  /***/ function(module, exports, __webpack_require__) {

          a = __webpack_require__(1);


  /***/ },
  /* 1 */
  /***/ function(module, exports) {

          module.exports = require('mylib/should/stay/a/Require');

我知道有一个插件可以做到这一点,但我在拦截正确的事件/理解插件文档方面遇到了麻烦。
目前尝试过的方法: 1. external... 这假设定义在其他地方 2. IgnorePlugin会产生webpackMissingModule... 与我想要的相反。
2个回答

1
你第一次尝试时可能正在参考 https://webpack.js.org/configuration/externals/,因此你很可能已经非常接近找到解决方案。
老实说,使用 externals 可能有点不直观,因为它没有完全记录,并且需要将加载机制指定为字符串的一部分(而不是适当的 js 对象)。
要指示 webpack 保留某些 require,请在配置文件中使用类似以下内容(已在 v4.25.5 中测试):
const IGNORED = ['dep1', 'dep2']

module.exports = {
  // ...
  // other options
  // ...
  externals: IGNORED.reduce((acc, p) => (acc[p] = `commonjs ${p}`, acc), {})
};

如果您需要更多的灵活性,请使用function方法:
 externals: (_, req, cb) => {
    if (IGNORED.indexOf(req) >= 0) {
      return cb(null, `commonjs ${req}`)
    }
    cb()
  }

如果省略 commonjs,将使用全局作用域来解析依赖关系。

0
如果有像我一样遇到这个问题并正在寻找webpack 5解决方案的人,可以按照以下方式操作:
module.exports = {
  // other options
  externals: [
    'some_lib',
    'some_other_lib'
  ],
  externalsType: 'commonjs',
}

外部也可以是正则表达式或函数,完整的选项集在webpack的外部文档中列出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接