Webpack动态需求

时间:2018-05-04 10:48:20

标签: webpack

我有一些使用此约定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:])

它有效。

知道如何解决这个问题吗?

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设置为此上下文模块的目录可能不是一个好主意。