javascript - 如何在 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 serve
并ng build
根据需要继续为混合引导应用程序工作。我现在遇到的问题是手动列出我正在迁移的当前应用程序的每个文件并不理想。我有数百个脚本需要添加,我需要的是能够使用如下通配模式:
"scripts": [
"src/app/angularjs/**/*.js"
],
问题是不支持这种语法。glob 模式在此处所述的部分中受支持,但在以下部分中不受支持:https ://angular.io/guide/workspace-config#assets-configurationassets
angular.json
scripts
在该scripts
部分中,我找不到类似的解决方案。它确实有一个扩展的对象 API,但没有什么能解决我可以告诉从此处列出的特定目录中选择所有文件的问题: https ://angular.io/guide/workspace-config#styles-and-scripts-configuration.js
是否可以通过某种方式使用 glob 模式或类似方法来选择目录中的所有文件,scripts
这样angular.json
我就不必手动列出数百个单独的.js
文件?
解决方案
坏消息
该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'
不过,我将保留上述内容,以便在正则表达式的全部功能可能派上用场的情况下使用。
推荐阅读
- php - 如何解决此 Codeigniter-4 登录控制器问题?
- javascript - 我应该在哪里调用一个方法来使用它的数据?
- java - HIVE:异常:无法在 Mac 上使用 JDK8 将类 jdk.internal.loader.ClassLoaders$AppClassLoader 强制转换为类 java.net.URLClassLoader
- java - JAVA_HOME 路径更新为版本 11,cmd 中的 java 版本仍然显示 8
- swift - Firebase - iOS 应用程序在首次安装时卡在启动屏幕上
- java - 在 JSP 中打印列表对象
- go - 使用功能选项而不是方法
- amazon-web-services - AWS Cloudformation:如何使用用户名作为标签
- html - SwiftUI:VStack 中视图之间的重叠
- ansible - Ansible - 从剧本中导入 group_vars all.yml