Модули узлов вне проекта Angular, нарушающие разрешение модулей в Visual Studio - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть веб-приложение с серверным приложением NodeJS и клиентским приложением Angular 7. Я использую одни и те же типы компонентов серверная и клиентская части, поэтому у меня есть интерфейсы в папке node_modules вне обоих проектов:

repos/myWebApp/
    client/
        node_modules/
            @angular/
            ...
        src/
            app/
                app.module.ts
                ...
            tsconfig.app.json
        angular.json
        package.json
        tsconfig.json
    node_modules/
        shared/
            classes/
                sharedBase.ts
                ...
            interfaces/
                sharedBase.interface.ts
                sharedModels.interface.ts
                ...
            node_modules/
                mongoose/
                ...
            package.json
    server/
        src/
            index.ts
            ...
        package.json
        tsconfig.json

Я занимаюсь разработкой с использованием Visual Studio Community 2017 (15.8.9). Когда я компилирую серверное приложение, у меня есть целые задачи, которые копируют общие классы из модуля общего узла в папки клиента и сервера. Все работало нормально, пока пару дней назад случайным образом Webpack в AngularCLI не дал мне сообщение об ошибке компиляции, что sharedModels.interface.ts отсутствует в компиляции TypeScript. Вот tsconfig.json моего клиента:

{
    "compileOnSave": false,
    "compilerOptions": {
        "outDir": "./dist/out-tsc",
        "baseUrl": "src",
        "sourceMap": true,
        "declaration": false,
        "moduleResolution": "node",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "target": "esnext",
        "typeRoots": [
            "node_modules/@types"
        ],
        "lib": [
            "esnext",
            "es2017",
            "dom"
        ]
    }
}

Я могу исправить ошибку AngularCLI, добавив "include": [ "../node_modules/shared/*" ] к клиентскому tsconfig.json, но затем разрешение модуля в VS нарушается. Более конкретно:

// adding the "include" breaks imports like these, i.e. VS "cannot find module ___"
import { Component } from '@angular/core';
import { ISharedModels } from 'shared/interfaces/sharedModels.interface';

// imports like these, however, still work in VS
import { BaseComponent } from 'app/components/base.component';

Я не уверен, что это проблема самой VS, расширений TypeScript, которые я использую в VS, TypeScript, Angular, AngularCLI, их комбинации или просто несоответствия между ними. Я попытался изменить свой baseURL, добавить пути к compilerOptions, указать «файлы» вместо «include» и другие параметры tsconfig, и я не могу вернуться к сценарию, когда и VS, и AngularCLI счастливы. Я все еще не уверен, что изменилось, чтобы заставить их больше не сотрудничать; с этими настройками они работали последние несколько месяцев (я обновил до Angular 7 несколько недель назад).

...