Angular5项目使用npm link后构建缺失*.ts文件的解决方法求助
我之前也碰到过一模一样的问题——用npm link关联本地开发的sce-plugins包后,ng build -w就开始报找不到.ts文件的错误,结合你提到的那些Angular CLI相关的issue,给你几个经过验证的解决办法:
修改TypeScript配置,放开链接包的编译权限
Angular CLI默认会排除node_modules目录下的文件编译,但npm link的包是软链到本地源码的,所以需要在项目根目录的tsconfig.json里调整exclude规则,把sce-plugins从排除列表中移除:{ "compilerOptions": { /* 你的现有配置 */ }, "exclude": [ "node_modules/**/*", "!node_modules/sce-plugins/**/*" ] }这样TypeScript编译器就会处理这个软链包里的ts文件了。
用相对路径临时替代npm link(本地调试用)
如果只是本地开发调试,你可以直接把导入语句里的包名换成sce-plugins项目源码的相对路径,比如:// 原来的导入 import { SomePlugin } from 'sce-plugins'; // 改成相对路径 import { SomePlugin } from '../path/to/sce-plugins/src';这种方式能绕开npm link的软链问题,让CLI直接识别并编译源码文件。
调整Angular CLI配置,添加链接包到编译范围
在你的.angular-cli.json(Angular 5的CLI配置文件)里,找到apps数组下的对应应用配置,添加include字段指定链接包的源码路径:{ "apps": [ { "root": "src", "outDir": "dist", "include": [ "../node_modules/sce-plugins/**/*.ts" ], // 其他现有配置... } ] }注意路径要根据你的项目实际结构调整,确保能正确指向
sce-plugins的ts文件目录。预编译链接包的源码
回到sce-plugins项目,先执行tsc把源码编译成js文件,然后在它的package.json里把main字段指向编译后的入口文件(比如dist/index.js)。这样npm link之后,Angular CLI会直接加载编译好的js文件,不会再尝试编译ts源码,自然就不会报找不到文件的错误了。
这些方案都是从你提到的那些CLI issue里提炼出来的核心解决思路,本质上都是解决Angular 5 CLI对node_modules软链文件编译处理的限制问题,你可以根据自己的开发场景选择最合适的方式。
内容的提问来源于stack exchange,提问作者Alexander Mills

