【问题标题】:Webpack dynamic require throwing errorWebpack 动态需要抛出错误
【发布时间】:2018-05-03 14:38:39
【问题描述】:

我有以下一段运行良好的代码:

require.ensure(['./core/sample-form.js'], require => {
    require('./core/sample-form.js');  
});

现在,如果我将该字符串放入变量中:

const ajaxJs = './core/sample-form.js';
require.ensure([ajaxJs], require => {
    require(ajaxJs);  // eslint-disable-line import/no-dynamic-require
});

它会抛出以下错误:

未捕获(承诺中)错误:找不到模块“。”在 webpackMissingModule

有什么方法可以使用变量来满足这个需求吗?

【问题讨论】:

标签: javascript webpack-2 commonjs


【解决方案1】:

当名称是动态变量时,Webpack 无法确定要捆绑哪些模块。你不能在require 中使用变量名。您必须执行以下操作:

require.ensure(['./core/sample-form.js'], require => {
    require('./core/sample-form.js');  // eslint-disable-line import/no-dynamic-require
});

This 回答可以帮上忙。

【讨论】:

  • 当然你应该能够使用动态需求,否则 eslint 中不会有关于它的警告?我可能是错的,但是如果你不能做到,只警告你而不是抛出错误似乎很愚蠢?
  • 似乎使用 webpack 的 context 模块可以做到这一点。正如@matias-cicero 回答的那样。
【解决方案2】:

看看 Webpack 的Context Module

显然,当您尝试动态地请求模块时,Webpack 会尝试将输入表达式解析为 context

试试下面的代码(还没有测试过):

const ajaxJs = './sample-form.js';
core = require.context('./core', true, /^\.\/.*\.js$/);
require.ensure([], () => {
    core(ajaxJs);
});

【讨论】:

  • @Pete 是的,我不确定。很高兴你把它整理出来
猜你喜欢
  • 2011-04-18
  • 2017-03-15
  • 2019-05-03
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 2017-01-20
  • 2016-10-04
  • 2016-09-23
相关资源
最近更新 更多