如何排除webpack打包.spec.js文件

16

我的 Package.bundle 读取

var reqContext = require.context('./', true, /\.js$/);

reqContext.keys().map(reqContext);

基本上包括所有 .js 文件。

我希望该表达式排除任何 ***.spec.js 文件。有任何正则表达式可以排除 .spec.js 文件吗?

2个回答

29

由于/\.js$/允许所有以.js结尾的文件(因为它基本上匹配了字符串末尾的.js),而你需要允许没有.spec在它们之前的所有.js文件,因此你需要一个带有负向先行断言的正则表达式:

/^(?!.*\.spec\.js$).*\.js$/

请参见这个正则表达式演示

细节:

  • ^ - 字符串开始
  • (?!.*\.spec\.js$) - 该行不能以.spec.js结尾,如果是,则不匹配
  • .* - 除换行符外的任意0个或多个字符
  • \.js - .js序列
  • $ - 字符串结束

@bernard 那个 /(?!\.spec\.js$)\.js$/ 没有太多意义。/(?!\.spec\.js$)\.js$/ 相当于 /\.js$/,因为前瞻结果总是为真。 - Wiktor Stribiżew

17

尽管被接受的回答在技术上是正确的,但您不应该需要将这个正则表达式添加到您的webpack配置中。

这是因为webpack只编译通过requireimport引用的文件,因此您的spec.js文件将不会被包含在bundle中,因为它们在实际代码中没有被引用。


但是你需要从其他.js文件中使用requireimport代码到.spec文件中进行测试,对吧? - volume one
1
是的,但这并不重要。在webpack中,您指定应用程序的根目录,它首先查找该文件,然后遍历从那里进行的所有导入。它永远不会到达.spec文件,因为应用程序代码没有从.spec文件中导入(只有相反的情况)。 - cdimitroulas
规范文件导入源文件/模块时很重要,例如测试React组件。 - bashhike
不会的。只有当您的源文件导入规范文件时才会有影响,但这永远不应该是情况。所有测试文件都会导入源文件/模块,否则它们如何测试源代码呢? :) - cdimitroulas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接