javascript - 如何在 angular.json 的脚本部分使用 glob 模式?

标签 javascript angular angular-cli angular-hybrid

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

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

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

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

问题是据我所知,这种语法不受支持。如此处所述,angular.jsonassets 部分支持 glob 模式,但 scripts 部分不支持: https://angular.io/guide/workspace-config#assets-configuration

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

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

最佳答案

坏消息

scripts 部分不支持与 assets 部分相同的 glob 模式。

好消息(?)

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

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

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

这将为您提供 list ,为方便起见,已将其引用。您可能需要进行快速搜索/替换(将“.”更改为“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'

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

关于javascript - 如何在 angular.json 的脚本部分使用 glob 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58660940/

相关文章:

css - 在 Angular 6+ (styleExt) 中使用 scss 作为默认样式表

angular - 如何使用自定义 index.html 位置配置 Angular2?

javascript - 是否接受PayPal购物车?

javascript - Vue中如何让组件标签以前缀开头?

angular - 如何使用 Angular 检测浏览器?

angular - 可观察<数组> Angular2

javascript - Chrome/Internet Explorer 浏览器刷新(F5、ctrl+R、刷新箭头等)无法在远程服务器上使用 Angular (2+) 项目

javascript - Chrome : onBeforeUnload method does not use given text

javascript - 快速路由 : route is ignored

angular - 如何处理 Angular 8 中的控制台(http)错误?