我刚刚将我的项目更新为Angular 2 RC 6。我现在正在尝试使用博客文章中提到的提前编译http://angularjs.blogspot.com/但没有成功。
我在ASP中构建项目时没有使用angular cli。网
正如博客文章所建议的,我已经安装了@angular/compiler cli
但当我尝试从命令提示符运行ngc时,它会给出错误
'ngc' is not recognized as an internal or external command,
operable program or batch file.
npm run ngc
npm ERR! Windows_NT 10.0.10586
npm ERR! argv "C:\Program Files\nodejs\node.exe" "C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js" "run" "ngc"
npm ERR! node v6.4.0
npm ERR! npm v3.10.3
npm ERR! missing script: ngc
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR! <https://github.com/npm/npm/issues>
npm ERR! Please include the following file with any support request:
npm ERR! D:ProjectAppnpm-debug.log
有人能指导如何将AoT编译器与ASP一起使用吗。Net项目。或者,当您不使用Angular CLI,而是手动构建组件等时。
编辑
我现在设法运行ngc,首先转到/node_modules/.bin/,然后运行
ngc -p D:ProjectApp
但现在编译器抛出以下错误:
当我试图用ngc编译我的项目时,它会抛出以下错误:
Error: Error encountered resolving symbol values statically. Function calls are not supported. Consider replacing the function or lambda with a reference to an exported function (position 92:25 in the original .ts file), resolving symbol AppModule in
在我的应用程序模块中,我有以下提供商,这可能是导致该项目的原因。我不确定这到底是怎么回事?
providers: [
GlobalService,
{
provide: Http,
useFactory: (backend: XHRBackend, defaultOptions: RequestOptions, globalService: GlobalService) => new HttpLoading(backend, defaultOptions, globalService),
deps: [XHRBackend, RequestOptions, GlobalService]
}
],
GlobalService,
{
provider: Http, // <-- I believe you were missing the "r" in provide"r"
}
看看rc6的突破性变化:
https://github.com/angular/angular/blob/master/CHANGELOG.md#breaking-更改
我在使用时遇到了这个问题
"@angular/compiler-cli": "^4.0.1"
对我来说,删除/nod_module/@angular文件夹并运行
npm install
似乎解决了我的问题。我的包裹一定被搞砸了
问题1
当运行package.json或"npm scripts"中的脚本时,要修复Windows 10上的路径问题,需要用双引号包装directory_path,并用反斜杠转义每个双引号:
"compile:aot": "./node_modules/.bin/ngc" -p src
这将执行位于具有-p src
自变量的./node_modules/.bin
中的ngc
程序。
否则,必须将cd ./node_modules/.bin && ngc -p src
作为两个不同的命令。
问题2
目前看来,angular 2的AOT编译在require()
语句方面存在问题。因此,如果你想消除编译错误,你必须从你的应用程序中删除所有require((语句。
显然,这是个坏主意,因为require((有值,尤其是在使用Webpack或其他模块捆绑器时。我们必须等待angular2团队的解决方案。
可能是因为@NgModule定义中有函数调用。我必须删除一些动态提供者,使其为我工作。
也许您应该尝试替换您的"useFactory:(…(=>{…}",或者至少测试注释它。