缺少 *.ts 文件(由于 `npm link`?)
Missing *.ts files (due to `npm link` ?)
我在 Angular5 项目中有这个导入语句:
import {plugins, SCECodeGenType} from 'sce-plugins/code-generation';
这在我的文件系统上解析为这个路径:
/Users/.../suman-chrome-extension/node_modules/sce-plugins/code-generation/index.d.ts
使用 ng build -w
构建应用程序时出现此错误:
ERROR in ../sce-plugins/code-generation/index.ts Module build failed: Error: /Users/alexamil/WebstormProjects/oresoftware/sumanjs/sce-plugins/code-generation/index.ts is missing from the TypeScript compilation. Please make sure it is in your tsconfig via the 'files' or 'include' property.
at AngularCompilerPlugin.getCompiledFile (/Users/alexamil/WebstormProjects/oresoftware/sumanjs/suman-chrome-extension/node_modules/@ngtools/webpack/src/angular_compiler_plugin.js:662:23)
at plugin.done.then (/Users/alexamil/WebstormProjects/oresoftware/sumanjs/suman-chrome-extension/node_modules/@ngtools/webpack/src/loader.js:467:39)
at <anonymous> @ ./src/app/shared/services/lang.service.ts 14:24-62 @ ./src/app/app.module.ts @ ./src/main.ts @ multi ./src/main.ts
我相信这是因为我正在使用 npm link
到 link 本地开发的 'sce-plugins'
项目。
我在此处看到将 npm link
用于 Angular5 项目的一些问题:
https://github.com/angular/angular-cli/issues/3875
https://github.com/angular/angular-cli/issues/8677
https://github.com/angular/angular-cli/issues/9376
有人知道如何解决吗?
更新:
它似乎与 npm link
perse 或 symlinks 无关。如果我简单地将本地目录复制到 node_modules/sce-plugins
,我会得到同样该死的错误。 Yet,如果我 npm install
sce-plugins 到 node_modules 那么我 not 得到错误。很奇怪,好像和angular-cli有关,不是NPM。
所以在再次阅读这个 Github 问题后:
https://github.com/angular/angular-cli/issues/8284
我在 .angular-cli.json
中进行了此更改:
"defaults": {
"build": {
"preserveSymlinks": true // <<<< add this
},
"styleExt": "scss",
"component": {
}
}
现在,考虑到我的 tsconfig.app.json
文件中的 preserveSymlinks
标志和包含字段:
"include":[
"./**/*.ts",
"../node_modules/sce-plugins/**/*.ts"
],
我现在可以将 'sce-plugins'
符号链接到我的主项目中,而不是手动复制文件。有可能您根本不需要 "include"
字段,尽管我发现如果删除 "include"
字段,它将不起作用。
在Angular6"angular.json"文件中需要将"preserveSymlinks"放在"options"下
示例:
"defaults": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"preserveSymlinks": true,
"outputPath": "dist/ConsoleClient",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.app.json",
"assets": [
"src/favicon.ico",
"src/assets",
"src/web.config"
],
我在将我的应用程序从 Angular 5 迁移到 6 时遇到了同样的问题,我已应用修复:
在 tsconfig.app.json 的 includes array
中添加了丢失文件的条目(注意:文件名不是 tsconfig.json)
此外,请确保您提到的丢失文件的路径是相对于
tsconfig.app.json
这可能是由于 import
的 url 中区分大小写的拼写错误造成的。
ng build
输出的 'stack trace' 不会(或者我应该说可能不会)将您指向正确的位置。就我而言,我在 Visual Studio 中对文件名进行了全局搜索(不包括 .ts
),并找到了对模型定义文件的引用:
import { ItemsUsedEntry } from '../models/itemsUsedentry.model';
而不是
import { ItemsUsedEntry } from '../models/itemsusedentry.model';
这很容易在 Visual Studio 全局 'Find' window 中找到,方法是扫描我在 itemsusedentry.model
上搜索的所有结果。
我在 Angular5 项目中有这个导入语句:
import {plugins, SCECodeGenType} from 'sce-plugins/code-generation';
这在我的文件系统上解析为这个路径:
/Users/.../suman-chrome-extension/node_modules/sce-plugins/code-generation/index.d.ts
使用 ng build -w
构建应用程序时出现此错误:
ERROR in ../sce-plugins/code-generation/index.ts Module build failed: Error: /Users/alexamil/WebstormProjects/oresoftware/sumanjs/sce-plugins/code-generation/index.ts is missing from the TypeScript compilation. Please make sure it is in your tsconfig via the 'files' or 'include' property.
at AngularCompilerPlugin.getCompiledFile (/Users/alexamil/WebstormProjects/oresoftware/sumanjs/suman-chrome-extension/node_modules/@ngtools/webpack/src/angular_compiler_plugin.js:662:23)
at plugin.done.then (/Users/alexamil/WebstormProjects/oresoftware/sumanjs/suman-chrome-extension/node_modules/@ngtools/webpack/src/loader.js:467:39)
at <anonymous> @ ./src/app/shared/services/lang.service.ts 14:24-62 @ ./src/app/app.module.ts @ ./src/main.ts @ multi ./src/main.ts
我相信这是因为我正在使用 npm link
到 link 本地开发的 'sce-plugins'
项目。
我在此处看到将 npm link
用于 Angular5 项目的一些问题:
https://github.com/angular/angular-cli/issues/3875
https://github.com/angular/angular-cli/issues/8677
https://github.com/angular/angular-cli/issues/9376
有人知道如何解决吗?
更新:
它似乎与 npm link
perse 或 symlinks 无关。如果我简单地将本地目录复制到 node_modules/sce-plugins
,我会得到同样该死的错误。 Yet,如果我 npm install
sce-plugins 到 node_modules 那么我 not 得到错误。很奇怪,好像和angular-cli有关,不是NPM。
所以在再次阅读这个 Github 问题后: https://github.com/angular/angular-cli/issues/8284
我在 .angular-cli.json
中进行了此更改:
"defaults": {
"build": {
"preserveSymlinks": true // <<<< add this
},
"styleExt": "scss",
"component": {
}
}
现在,考虑到我的 tsconfig.app.json
文件中的 preserveSymlinks
标志和包含字段:
"include":[
"./**/*.ts",
"../node_modules/sce-plugins/**/*.ts"
],
我现在可以将 'sce-plugins'
符号链接到我的主项目中,而不是手动复制文件。有可能您根本不需要 "include"
字段,尽管我发现如果删除 "include"
字段,它将不起作用。
在Angular6"angular.json"文件中需要将"preserveSymlinks"放在"options"下 示例:
"defaults": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"preserveSymlinks": true,
"outputPath": "dist/ConsoleClient",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.app.json",
"assets": [
"src/favicon.ico",
"src/assets",
"src/web.config"
],
我在将我的应用程序从 Angular 5 迁移到 6 时遇到了同样的问题,我已应用修复:
在 tsconfig.app.json 的 includes array
中添加了丢失文件的条目(注意:文件名不是 tsconfig.json)
此外,请确保您提到的丢失文件的路径是相对于
tsconfig.app.json
这可能是由于 import
的 url 中区分大小写的拼写错误造成的。
ng build
输出的 'stack trace' 不会(或者我应该说可能不会)将您指向正确的位置。就我而言,我在 Visual Studio 中对文件名进行了全局搜索(不包括 .ts
),并找到了对模型定义文件的引用:
import { ItemsUsedEntry } from '../models/itemsUsedentry.model';
而不是
import { ItemsUsedEntry } from '../models/itemsusedentry.model';
这很容易在 Visual Studio 全局 'Find' window 中找到,方法是扫描我在 itemsusedentry.model
上搜索的所有结果。