缺少* .ts文件(由于`npm link`?)

时间:2018-02-14 22:15:44

标签: angular typescript angular-cli angular5 tsc

我在Angular5项目中有这个import语句:

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链接'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或符号链接没有关系。如果我只是将本地目录复制到node_modules/sce-plugins,我会得到同样的错误。 然而,如果我npm install sce-plugins到node_modules,那么我 not 得到错误。很奇怪,似乎它与angular-cli有关,而不是NPM。

4 个答案:

答案 0 :(得分:27)

所以再次阅读这个Github问题之后: https://github.com/angular/angular-cli/issues/8284

我在.angular-cli.json

中进行了此更改
  "defaults": {
    "build": {
      "preserveSymlinks": true //   <<<< add this
    },
    "styleExt": "scss",
    "component": {
    }
  }

现在,鉴于我preserveSymlinks文件中的tsconfig.app.json标志和包含字段:

 "include":[
    "./**/*.ts",
    "../node_modules/sce-plugins/**/*.ts"
  ],

我现在可以将'sce-plugins'符号链接到我的主项目中,而不是手动复制文件。您可能根本不需要"include"字段,但我发现如果我删除了"include"字段,那么它将不起作用。

答案 1 :(得分:5)

在Angular 6“ angular.json”文件中,需要将“ preserveSymlinks”放在“选项”下 示例:

SELECT * 
FROM CHANGETABLE (CHANGES dbo.[Table], 1) CT;

答案 2 :(得分:0)

将我的应用程序从Angular 5迁移到6时,我遇到了同样的问题:

在tsconfig.app.json的includes array中添加了丢失文件的条目(注意:文件名不是tsconfig.json)

此外,请确保您提到的丢失文件的路径是相对于 tsconfig.app.json

答案 3 :(得分:0)

这可能是由import的网址中区分大小写的错字引起的。

ng build输出的“堆栈跟踪”不会(或者应该说不是)将您指向正确的位置。就我而言,我在Visual Studio中进行了全局搜索以查找文件名(不包括.ts),并找到了对模型定义文件的引用:

import { ItemsUsedEntry } from '../models/itemsUsedentry.model';

代替

import { ItemsUsedEntry } from '../models/itemsusedentry.model';

通过在itemsusedentry.model上搜索所有搜索结果,可以轻松地在Visual Studio全局“查找”窗口中进行选择。