目标:对于某些匹配模式P的库,让webpack
按原样发出/编译require
语句。
示例:
假设我有mylib
我希望通过as-is
,因此需要在运行时使用。
和这样的代码。
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
...与我想要的相反。
答案 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
,则将使用全局范围来解决依赖性。