Angular CLI配置加载外部JS目录报错,如何批量引入整个目录文件?
解决Angular CLI中加载Foundation Sites整个JS目录的问题
错误原因分析
你遇到的EISDIR: illegal operation on a directory错误,其实是因为你用的**/*通配符匹配到了node_modules/foundation-sites/dist/js下的plugins目录,而Angular CLI的scripts配置只能处理文件,没法直接读取目录内容,所以触发了这个错误。
解决方案
不需要逐个手动添加文件,只需要调整glob规则,让它只匹配JS文件,或者分配置处理目录里的文件:
方案1:只加载根目录的JS文件(忽略plugins目录)
修改angular-cli.json中的scripts配置,把glob规则改成只匹配JS文件:
"scripts": [ { "glob": "**/*.js", "input": "../node_modules/foundation-sites/dist/js", "output": "/js/" } ]
**/*.js会递归匹配所有子路径下的JS文件,但不会选中目录本身,这样就能避开plugins目录导致的错误。
方案2:同时加载根目录和plugins里的JS文件
如果你需要用到plugins目录下的插件文件,可以分两个配置项来处理:
"scripts": [ { "glob": "*.js", "input": "../node_modules/foundation-sites/dist/js", "output": "/js/" }, { "glob": "**/*.js", "input": "../node_modules/foundation-sites/dist/js/plugins", "output": "/js/plugins/" } ]
第一个配置加载dist/js根目录下的所有JS文件,第二个配置专门处理plugins目录里的JS文件,这样既不会触发目录读取错误,也能一次性加载所有需要的文件。
补充说明
Angular CLI的assets/scripts配置中,glob规则如果匹配到目录,CLI会尝试读取目录内容,但scripts只能处理文件,所以必须确保你的glob规则只命中文件,或者单独为子目录配置规则。
内容的提问来源于stack exchange,提问作者Denise Mauldin
相关产品推荐
相关产品推荐

