Webpack:对于某些模块,请保留'要求'陈述

时间:2017-01-22 03:25:09

标签: webpack

目标:对于某些匹配模式P的库,让webpack按原样发出/编译require语句。

示例:

  1. 假设我有mylib我希望通过as-is,因此需要在运行时使用。

  2. 和这样的代码。

  3. 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');
    

    我知道插件可以做到这一点,但我无法拦截正确的事件/理解the plugin docs

    到目前为止尝试过: 1. external ...这假设定义在其他地方 2. IgnorePlugin给出webpackMissingModule ...与我想要的相反。

1 个答案:

答案 0 :(得分: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,则将使用全局范围来解决依赖性。