首页 > 解决方案 > 如何在 angular.json 的脚本部分使用 glob 模式?

问题描述

我有一个混合的 AngularJS/Angular 应用程序,它需要一些时间才能完成迁移以完全成为一个 Angular 应用程序。当这个过程发生时,我想从以前的构建系统转移到使用 CLI 和 webpack 来管理所有旧的 AngularJS 脚本。这是可能的,因为我之前通过将所有脚本添加到该scripts部分中angular.json,如下所示:

"scripts": [              
  "src/app/angularjs/app.js",
  "src/app/angularjs/controllers/main.js",
  "src/app/angularjs/services/someService.js",
  "src/app/angularjs/controllers/someController.js"           
],

这很好用,CLI 通过构建ng serveng build根据需要继续为混合引导应用程序工作。我现在遇到的问题是手动列出我正在迁移的当前应用程序的每个文件并不理想。我有数百个脚本需要添加,我需要的是能够使用如下通配模式:

"scripts": [              
  "src/app/angularjs/**/*.js"
],

问题是不支持这种语法。glob 模式在此处所述的部分中支持,但在以下部分中不受支持:https ://angular.io/guide/workspace-config#assets-configurationassetsangular.jsonscripts

在该scripts部分中,我找不到类似的解决方案。它确实有一个扩展的对象 API,但没有什么能解决我可以告诉从此处列出的特定目录中选择所有文件的问题: https ://angular.io/guide/workspace-config#styles-and-scripts-configuration.js

是否可以通过某种方式使用 glob 模式或类似方法来选择目录中的所有文件,scripts这样angular.json我就不必手动列出数百个单独的.js文件?

标签: javascriptangularangular-cliangular-hybrid

解决方案


坏消息

scripts部分不支持与该部分相同的全局模式assets

好消息(?)

由于您正在从 AngularJS 过渡,因此您希望将来不会有任何新文件要导入,因此您可以只生成需要导入的所有文件的列表。

进入src/app/angular目录并运行以下命令:

find . -iregex '.*\.\(js\)' -printf '"%p",\n'

这将为您提供您的清单,为了您的方便已经引用了。您可能需要进行快速搜索/替换(将“.”更改为“src/app/angularjs”),并且不要忘记删除最后一个逗号,但是一旦您完成了该操作,您就应该准备就绪。

额外新闻

您可以使用 进一步过滤掉不需要的文件-not,因此(根据您的评论)您可以这样做:

find . -iregex '^.*\.js$' -not -iregex '^.*_test\.js$' -printf '"%p",\n'

这应该会给你所有的 .js 文件,而不需要你的 _test.js 文件。

当然,这不是一个复杂的模式,所以正如@atconway 在下面指出的那样,这同样适用:

find . -iname "*.js" -not -iname "*_test.js" -printf '"%p",\n'

不过,我将保留上述内容,以便在正则表达式的全部功能可能派上用场的情况下使用。


推荐阅读