带有Angular2的打字稿 - 定位ES5会产生错误吗?

时间:2017-03-11 10:08:49

标签: javascript node.js angular typescript npm

我使用npm -v =>3.10.10并且我想运行Angular2的新项目(空的)。

如果我写

npm isntall angular2 --save

我明白了:

enter image description here

但在阅读this answer之后说明:

  

您可能需要手动安装未满足的顶级模块   依赖关系:

- 我这样做了:

  • npm isntall es6-shim@^0.35.0 --save
  • npm isntall reflect-metadata@0.1.2 --save
  • npm isntall rxjs@5.0.0-beta.6 --save
  • npm isntall zone.js@^0.6.12 --save

现在我有了这个:

enter image description here

所以现在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"

  ]
}

现在我在gulp中运行cmd,该网站已启动并正常运行(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" ---到---> "target": "es6"

现在看起来不错:

enter image description here

问题

错误包括MapSetPromise ES6功能。 - 这会导致编译器使用缺少上述类型定义的普通es5 lib.d.ts

但现在事情不会起作用,因为它们应该是因为并非所有浏览器都支持这一点。

  • 这是修正警告的正确方法吗?另外 - 我怎样才能" ES5' y"我的代码?

PS

其他解决方案声明将TS文件更改为:

 "target": "es5",
 "lib": ["es5", "es6", "dom"],

应该有效。但事实并非如此。还是一样的错误。

1 个答案:

答案 0 :(得分:1)

您正在尝试下载已弃用的angular2版本:

使用@ angular / cli,因为为您配置了所有内容(tsconfig@types/shims):

npm install @angular/cli -g 

ng new myApp

cd myApp

ng serve