我有一些使用此约定framework-{function}
命名的模块,我需要它们动态。
init(name, options) {
let plugin = require(`framework-${name}`)(this, options);
this.registerPlugin(name, plugin);
}
当我在webpack配置中使用开发模式时,Webpack会生成此代码。即使Cannot find module framework-db
确实存在node_modules
,它也会抱怨/***/ "./node_modules/framework sync recursive ^framework\\-.*$":
/*!*****************************************************!*\
!*** ./node_modules/framework sync ^framework\-.*$ ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("function webpackEmptyContext(req) {\n\tvar e = new Error('Cannot find module \"' + req + '\".');\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = \"./node_modules/framework sync recursive ^framework\\\\-.*$\";\n\n//# sourceURL=webpack:///./node_modules/framework_sync_^framework\\-.*$?");
/***/ }),
。
init(name, options) {
let plugin = require(`framework-db`)(this, options);
this.registerPlugin(name, plugin);
}
如果我硬编码,
def deep_get(d, keys):
if not keys or d is None:
return d
return deep_get(d.get(keys[0]), keys[1:])
它有效。
知道如何解决这个问题吗?
答案 0 :(得分:0)
在webpack构建时,您的name
变量是否可能未知?
如果是这样,您可以尝试在模块的路径中插入字符串文字,以便webpack创建上下文模块,例如:
let plugin = require('node_modules/framework-' + name)(this, options);
这里记录在“require with expression”部分: https://webpack.js.org/guides/dependency-management/
小心,尝试在此字符串文字中包含最具体的路径,因为,如docs中所指定的那样:
这意味着支持动态需求,但会导致所有可能的模块都包含在捆绑包中。
因此,除非找到任何解决方法,否则将node_modules
设置为此上下文模块的目录可能不是一个好主意。