【问题标题】:require.context: inline RegExp works, var RegExp does notrequire.context:内联 RegExp 有效,var RegExp 无效
【发布时间】:2016-07-14 04:33:48
【问题描述】:

如果声明了 SPEC Env,我将尝试有条件地加载我的测试:

var context = null
if (process.env.SPEC) {
  context = require.context('./tests', true, /.*?SearchInput.*/);
} 
context.keys().forEach(context);

这是完美的工作。 现在如果我这样做

var context = null
if (process.env.SPEC) {
  var c = /.*?SearchInput.*/;
  context = require.context('./tests', true, c);
} 
context.keys().forEach(context);

这根本不起作用,./ 中的所有文件都匹配('./tests' 参数被忽略)

我错过了什么? 我希望 require.context 函数的第三个参数是 RegExp 对象,这样我就可以使用变量构造 RegExp。

编辑 1

这不起作用:

var context = null
if (process.env.SPEC) {
  var c = new RegExp(/.*?SearchInput.*/);
  context = require.context('./tests', true, c);
} 
context.keys().forEach(context);

要对此进行测试,您可以编辑此项目的 tests.webpack.js 文件: https://github.com/erikras/react-redux-universal-hot-example

需要允许SPEC变量通过webpack

  new webpack.DefinePlugin({
      'process.env': {
        NODE_ENV: JSON.stringify('test'),
        SPEC: JSON.stringify(process.env.SPEC || null)
      },
      __CLIENT__: true,
      __SERVER__: false,
      __DEVELOPMENT__: true,
      __DEVTOOLS__: false  // <-------- DISABLE redux-devtools HERE
    })

然后运行:npm run test

或:SPEC=t npm 运行测试

【问题讨论】:

  • 您是否尝试过使用RegExp 构造函数?
  • @RobbyCornelissen - 为什么会有不同?
  • @nnnnnn 不知道。它应该可以与分配给变量的文字一起正常工作,但根据 OP 它不能。尝试使用构造函数将提供额外的数据点,并可能有助于确定原因。
  • @RobbyCornelissen 是的,我尝试了 RegExp 构造函数,但它不起作用。我编辑了问题。
  • var c = new RegExp(/.*?SearchInput.*/); 应该是var c = new RegExp('.*?SearchInput.*');,因为RegExp 构造函数接受string,而不是正则表达式文字。

标签: javascript commonjs


【解决方案1】:

4 年后,面临同样的问题。检查require.context的警告消息

https://webpack.js.org/guides/dependency-management/#requirecontext

【讨论】:

    【解决方案2】:

    Sokra 在 webpack github 上回答了这个问题,说传递给 require.context 的正则表达式必须是静态可分析的。这就是为什么传递 /thing/ 有效,而不是 new RegExp(thing)

    https://github.com/webpack/webpack/issues/4772

    【讨论】:

      猜你喜欢
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 2016-04-19
      相关资源
      最近更新 更多