如何在节点脚本中重用Angular模块

How to reuse Angular modules in node scripts

本文关键字:Angular 模块 脚本 节点      更新时间:2023-09-26

我想从节点脚本中重用Angular2的@angular/http模块。我使用的是节点v4.6.0,@angular/http版本2.1.2,npm从中获取。

在这种特定的情况下,我想这样做,这样我就可以很容易地隔离模块,确认它的行为,并处理它(我的意思是,我应该能够纠正-这就是为什么它被称为模块…(。但我也在寻求关于重用节点中没有固有浏览器依赖关系的Angular模块的一般建议。

我正在查看的web应用程序如何使用我尝试过的模块:

myUrl = '...'
http = require('@angular/http')
Http = new http.Http()
Http.get(myUrl).then(result => console.log(result))

得到:

TypeError:无法读取未定义的属性"merge"在mergeOptions(/home/sam/node_modules/@angular/http://bundles/http://umd.js:1578:30(位于Http.get(/home/sam/nod_module/@angular/Http://bundles/Http://umd.js:1672:45(回复:1:6位于REPLServer.defaultEval(repl.js:262:27(在绑定(domain.js:287:14(位于REPLServer.runBound〔as eval〕(domain.js:300:12(REPLServer。(回复js:431:12(在emitOne(events.js:82:20(位于REPLServer.emit(events.js:169:7(在REPLServer.Interface.onLine(readline.js:122:10(

那么,它完成了吗?能做到吗?如何在Http的特定情况下以及一般情况下进行?

在对NG2(Angular2(进行了更多的学习之后,我意识到一旦你学习了它,就会发现一件显而易见的事情:NgModules不仅仅是一个简单的容器,用于存放"模块"这一术语所暗示的东西。他们有非常具体的职责,并且与NG2核心紧密相连。所以,您不能仅仅将它们导入到节点中。你需要一个自举的NG2核心模块来处理NG2中的任何事情。由于注射系统的原因,访问作为由HttpModule提供的可注射服务的Http再次变得更加复杂。

使用NG2的因果报应测试框架和实用程序,我能够在某种程度上孤立地访问NG2的Http服务。整个测试设置非常复杂,但它都是在QuickStart应用程序中为您完成的(测试设置本质上为您提供了一个引导的NgModule,在您可以运行测试的服务器环境中(。我剥离了quickstart应用程序,并添加了一个类似这样的简单单元测试,然后运行npm test:

import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { DebugElement } from '@angular/core';
import { HttpModule, Headers, Http, Response } from '@angular/http';
import { Observable }     from 'rxjs';
import 'rxjs/add/operator/toPromise';
describe('Test frame for accessing Http!', function () {
  let http: Http
  beforeEach(async(() => {
   TestBed.configureTestingModule({
      imports: [ HttpModule ]
    })
    .compileComponents();
  }));
  beforeEach(() => {
      http = TestBed.get(Http);
  });
  it('Test some HTTP', () => {
    http.get('/base/foo.json').toPromise()
      .then((r: Response) => console.warn(r))
      .catch((e: any) => console.warn('An error occured'))
  });
});

支持这一点的服务器是因果报应,所以你可能需要调整它的配置,告诉它从哪里提供任何服务。。