Karma 文件:包括所有内容,除了忽略 bower_components,除了包括特定的 bower 文件

Karma files: include everything, except ignore bower_components, except include specific bower files

在包容优先于排除的世界里,这就是我想要的:

files : [
  'app/bower_components/angular/angular.js',
  'app/bower_components/angular-route/angular-route.js',
  'app/bower_components/angular-mocks/angular-mocks.js',
  'app/**/*.js',
],

exclude: [
  'app/bower_components/**/*.js'
],

但是,在 karma 配置中,文件排除优先。

除了我决定保留的特定文件外,我能否轻松忽略 bower_components 文件夹中可能潜伏的任何内容?

是的,您可以使用模式来做到这一点。 Karma 在内部使用 minimatch,因此对于您提出的情况,以下内容应该可以正常工作:

files : [
  'app/bower_components/angular/angular.js',
  'app/bower_components/angular-route/angular-route.js',
  'app/bower_components/angular-mocks/angular-mocks.js',
  'app/**/*.js',
],

exclude: [
  'app/bower_components/**/!(angular.js|angular-route|angular-mocks).js',
],

我刚刚在我们的 repo 中使用大量 angular- 文件进行了尝试,尽管看起来该模式中有一个无关的 .js,但它似乎可以正常工作。

Exclude every .js file in any subfolder of bower_components, except for files named either angular.js, angular-route or angular-mocks.

现在,如果您愿意 - 您可以替换 files: [] 数组中最上面的三个条目,然后只放置 app/bower_components/**/*.js 因为正如您所说 - 排除优先。只需继续堆积您 不想 想要排除的文件名,您应该会自动包括这些文件名。


编辑

正如 OP 所指出的那样 - 排除模式中的否定必须是包括扩展名的完整文件名,否则我们 运行 包含与所述文件名匹配但没有扩展名的文件夹的风险。

新模式为:

'app/bower_components/**/!(angular.js|angular-route.js|angular-mocks.js).js',

Exclude all .js files from bower_components except angular.js, angular-route.js and angular-mocks.js


至于包含,请在所有其他文件之前包含 angular.js,以免 运行 存在首先包含 angular 依赖文件并自行崩溃的风险。