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

Ale*_*lls 10 typescript tsc angular-cli angular angular5

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

import {plugins, SCECodeGenType} from 'sce-plugins/code-generation';
Run Code Online (Sandbox Code Playgroud)

这解析了我的文件系统上的这个路径:

/Users/.../suman-chrome-extension/node_modules/sce-plugins/code-generation/index.d.ts
Run Code Online (Sandbox Code Playgroud)

在构建应用程序时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
Run Code Online (Sandbox Code Playgroud)

我相信这是因为我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 linkperse或符号链接没有关系.如果我只是将本地目录复制到node_modules/sce-plugins,我会得到同样的错误.但是,如果我npm install插入到node_modules中,那么我就不会收到错误.很奇怪,似乎它与angular-cli有关,而不是NPM.

Ale*_*lls 31

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

我做了这个改变.angular-cli.json:

  "defaults": {
    "build": {
      "preserveSymlinks": true //   <<<< add this
    },
    "styleExt": "scss",
    "component": {
    }
  }
Run Code Online (Sandbox Code Playgroud)

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

 "include":[
    "./**/*.ts",
    "../node_modules/sce-plugins/**/*.ts"
  ],
Run Code Online (Sandbox Code Playgroud)

我现在可以符号链接'sce-plugins'到我的主项目,而不是手动复制文件.你可能根本不需要这个"include"领域,虽然我发现如果我删除了这个"include"领域,那它就行不通了.


小智 7

在Angular 6“ 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"
            ],
Run Code Online (Sandbox Code Playgroud)