【发布时间】:2017-03-11 18:38:56
【问题描述】:
我正在使用npm -v =>3.10.10,我想运行 Angular2 的一个新项目(空的)。
如果我写
npm isntall angular2 --save
我明白了:
但在阅读this answer 后指出:
您可能需要手动安装未满足的顶级模块 依赖:
——我这样做了:
npm isntall es6-shim@^0.35.0 --savenpm isntall reflect-metadata@0.1.2 --savenpm isntall rxjs@5.0.0-beta.6 --savenpm isntall zone.js@^0.6.12 --save
所以现在我有了这个:
所以现在package.json 看起来像:
{
"name": "AngularJS2",
"version": "1.0.0",
"author": "Ray Villalobos",
"description": "...",
"repository": {
"type": "git",
"url": "https://github.com/planetoftheweb/angular2.git"
},
"devDependencies": {
"gulp": "^3.9.0",
"gulp-sourcemaps": "^1.6.0",
"gulp-typescript": "^2.10.0",
"gulp-webserver": "^0.9.1"
},
"dependencies": {
"angular2": "^2.0.0-beta.21",
"es6-shim": "^0.35.0",
"reflect-metadata": "^0.1.2",
"rxjs": "^5.0.0-beta.6",
"zone.js": "^0.6.12"
}
}
而tsconfig.json 看起来像:
{
"compilerOptions": {
"target": "es5",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
},
"exclude": [
"node_modules"
]
}
现在我在cmd 中运行gulp 并且该站点已正常运行(this is the gulpFile.js file):
但是看着 cmd - I see many warnings :
C:\Users\sff\Desktop\1>gulp [11:39:33] Using gulpfile
~\Desktop\1\gulpfile.js [11:39:33] Starting 'copylibs'... [11:39:33]
Starting 'typescript'... [11:39:33] Starting 'watch'... [11:39:33]
Finished 'watch' after 22 ms [11:39:33] Starting 'webserver'...
[11:39:33] Webserver started at http://localhost:8000 [11:39:33]
Finished 'webserver' after 8.84 ms
C:/Users/sff/Desktop/1/node_modules/angular2/platform/browser.d.ts(78,90):
error TS2304: Cannot find name 'Promise'.
C:/Users/sff/Desktop/1/node_modules/angular2/src/core/application_ref.d.ts(38,88):
error TS2304: Cannot find name 'Promise'.
C:/Users/sff/Desktop/1/node_modules/angular2/src/core/application_ref.d.ts(92,42):
error TS2304: Cannot find name 'Promise'.
C:/Users/sff/Desktop/1/node_modules/angular2/src/core/application_ref.d.ts(151,33):
error TS2304: Cannot find name 'Promise'.
C:/Users/sff/Desktop/1/node_modules/angular2/src/core/change_detection/differs/default_keyvalue_differ.d.ts(23,15):
error TS2304: Cannot find name 'Map'.
C:/Users/sff/Desktop/1/node_modules/angular2/src/core/change_detection/differs/default_keyvalue_differ.d.ts(25,16):
error TS2304: Cannot find name 'Map'.
C:/Users/sff/Desktop/1/node_modules/angular2/src/core/di/reflective_provider.d.ts(103,123):
error TS2304: Cannot find name 'Map'.
C:/Users/sff/Desktop/1/node_modules/angular2/src/core/di/reflective_provider.d.ts(103,165):
error TS2304: Cannot find name 'Map'.
但是 - 我已经找到了解决方案:
- 我已经安装了
npm install @types/core-js --save-dev
和
将tsconfig.json的内容从:
"target": "es5" ---to ---> "target": "es6"
现在看起来不错:
问题
错误是因为 Map、Set 和 Promise 是 ES6 功能。
- 这会导致编译器使用缺少上述类型定义的普通es5 lib.d.ts。
但现在事情将无法正常工作,因为并非所有浏览器都支持这一点。
- 这是修复警告的正确方法吗?另外 - 我怎样才能“ES5'y”我的代码?
PS
其他解决方案将 TS 文件更改为:
"target": "es5",
"lib": ["es5", "es6", "dom"],
应该可以。但事实并非如此。还是一样的错误。
【问题讨论】:
标签: javascript node.js angular typescript npm