【问题标题】:Adding server side code to angular-cli project conflicts with node typings将服务器端代码添加到 angular-cli 项目与节点类型冲突
【发布时间】:2016-09-02 03:29:44
【问题描述】:

当向使用 angular-cli ng new [project-name] 初始化的 Angular2 项目添加基本的 express.js 配置(使用 TypeScript)时,我需要添加以下类型以使用 gulp 编译快速服务器:

typings install --ambient --save node

这会将以下行添加到 typings/browser.d.tstypings/main.d.ts

/// <reference path="browser/ambient/node/index.d.ts" />
and
/// <reference path="main/ambient/node/index.d.ts" />

在 express server.ts 文件中,我可以添加对 main 的引用而不是 browser 以保持 TypeScript 快乐

/// <reference path="../typings/main.d.ts" />

但是当我将节点类型参考留在browser.d.ts 文件中时,ng build 命令将失败:

Build failed.
The Broccoli Plugin: [BroccoliTypeScriptCompiler] failed with:
Error: Typescript found the following errors:
  C:/Users/user123/Downloads/my-catalog-master/my-catalog-master/tmp/broccoli_type_script_compiler-input_base_path-7VFCE2dg.tmp/0/src/typings.d.ts (3, 13): Subsequent variable declarations must have the same type.  Variable 'module' must be of type 'NodeModule', but here has type '{ id: string; }'.
    at BroccoliTypeScriptCompiler._doIncrementalBuild (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\lib\broccoli\broccoli-typescript.js:115:19)
    at BroccoliTypeScriptCompiler.build (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\lib\broccoli\broccoli-typescript.js:43:10)
    at C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\node_modules\broccoli-caching-writer\index.js:152:21
    at lib$rsvp$$internal$$tryCatch (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\node_modules\broccoli-caching-writer\node_modules\rsvp\dist\rsvp.js:1036:16)
    at lib$rsvp$$internal$$invokeCallback (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\node_modules\broccoli-caching-writer\node_modules\rsvp\dist\rsvp.js:1048:17)
    at lib$rsvp$$internal$$publish (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\node_modules\broccoli-caching-writer\node_modules\rsvp\dist\rsvp.js:1019:11)
    at lib$rsvp$asap$$flush (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\node_modules\broccoli-caching-writer\node_modules\rsvp\dist\rsvp.js:1198:9)
    at nextTickCallbackWith0Args (node.js:420:9)
    at process._tickCallback (node.js:349:13)

The broccoli plugin was instantiated at: 
    at BroccoliTypeScriptCompiler.Plugin (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\node_modules\broccoli-caching-writer\node_modules\broccoli-plugin\index.js:10:31)
    at BroccoliTypeScriptCompiler.CachingWriter [as constructor] (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\node_modules\broccoli-caching-writer\index.js:21:10)
    at BroccoliTypeScriptCompiler (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\lib\broccoli\broccoli-typescript.js:27:10)
    at Angular2App._getTsTree (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\lib\broccoli\angular2-app.js:280:18)
    at Angular2App._buildTree (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\lib\broccoli\angular2-app.js:101:23)
    at new Angular2App (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\lib\broccoli\angular2-app.js:42:23)
    at module.exports (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\angular-cli-build.js:6:10)
    at Class.module.exports.Task.extend.setupBroccoliBuilder (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\node_modules\angular-cli\lib\models\builder.js:55:19)
    at Class.module.exports.Task.extend.init (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\node_modules\angular-cli\lib\models\builder.js:89:10)
    at new Class (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\node_modules\angular-cli\node_modules\core-object\core-object.js:18:12)
    at Class.module.exports.Task.extend.run (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\node_modules\angular-cli\lib\tasks\build.js:15:19)
    at C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\node_modules\angular-cli\lib\commands\build.js:32:24
    at lib$rsvp$$internal$$tryCatch (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\node_modules\angular-cli\node_modules\rsvp\dist\rsvp.js:1036:16)
    at lib$rsvp$$internal$$invokeCallback (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\node_modules\angular-cli\node_modules\rsvp\dist\rsvp.js:1048:17)
    at lib$rsvp$$internal$$publish (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\node_modules\angular-cli\node_modules\rsvp\dist\rsvp.js:1019:11)
    at lib$rsvp$asap$$flush (C:\Users\user123\Downloads\my-catalog-master\my-catalog-master\node_modules\angular-cli\node_modules\angular-cli\node_modules\rsvp\dist\rsvp.js:1198:9)

我现在可以在browser.d.ts 中删除该行,以便它再次开始工作,但在重新安装打字时这并不理想。我目前正在使用angular-cli v1.0.0-beta.0

【问题讨论】:

    标签: node.js angular typescript angular-cli


    【解决方案1】:

    实际错误源自 src/typings.d.ts 文件。 Angular-cli 创建这个 typings.d.ts 文件,内容如下:

    /// <reference path="../typings/browser.d.ts" />
    declare var module: { id: string };
    

    删除此文件解决了问题,应用程序仍在运行。

    【讨论】:

    • 您能否提供更多有关如何将服务器端与 Angular cli 集成的信息? “ng build”和“ng serve”是否也编译运行服务端代码?
    • 我不使用 angular-cli 编译服务器代码,我也想保持这种方式。为了准备构建,我只使用 gulp。一个任务调用 ng serve,另一个任务启动服务器。
    • 感谢您的回复。您是否碰巧有一个使用 Angular cli 和服务器代码的种子项目的链接?
    【解决方案2】:

    我可以通过更改src/typings.d.ts来解决这个问题

    来自

    declare var module: { id: string };

    declare var module: NodeModule;

    并确保我通过 typings install node-4 --ambient --save 输入了节点 4。

    【讨论】:

      【解决方案3】:

      .spec.ts 文件的错误。当我更新时

      '@angular/testing';

      类似代码

      '@angular/core/testing';

      我的错误已解决;

      import {
        describe,
        ddescribe,
        expect,
        iit,
        it
      } from '@angular/testing';
      import {Hero} from './hero';
      
      describe('Hero', () => {
        it('should create an instance', () => {
          expect(new Hero()).toBeTruthy();
        });
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-02
        • 2017-11-19
        • 1970-01-01
        • 2019-04-17
        • 1970-01-01
        • 2021-02-09
        • 2017-03-04
        • 2017-09-30
        相关资源
        最近更新 更多