打字稿编译器错误TS2307:找不到模块" angular2 / core"从没有NPM的CDN加载时

时间:2016-04-01 07:24:08

标签: node.js angular typescript

我在我的项目(like this)中有一个angular2应用程序示例,其中包含typescript,但没有所有node_modules 。必要的文件嵌入在head index.html <script src="https://cdnjs.cloudflare.com/ajax/libs/es6-shim/0.35.0/es6-shim.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.16/system-polyfills.js"></script> <script src="https://npmcdn.com/angular2/es6/dev/src/testing/shims_for_IE.js"></script> <script src="https://code.angularjs.org/tools/system.js"></script> <script src="https://code.angularjs.org/tools/typescript.js"></script> <script src="https://code.angularjs.org/2.0.0-beta.13/angular2-polyfills.js"></script> <script src="https://code.angularjs.org/2.0.0-beta.13/Rx.js"></script> <script src="https://code.angularjs.org/2.0.0-beta.13/angular2.dev.js"></script> 的{​​{1}}中:

node.js

由于我想预先编译我的打字稿文件,我安装了tscassets/js。我的编辑器(PHPStorm 2016.1)会根据tsconfig.json中的定义自动将文件编译为{ "compilerOptions": { "target": "es5", "module": "system", "declaration": true, "noImplicitAny": false, "preserveConstEnums": true, "removeComments": true, "outDir": "../assets/js", "sourceMap": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "emitBOM": true, "moduleResolution": "node" } }

System.config({
    packages: {
        'assets/js': {
            format: 'register',
            defaultExtension: 'js'
        }
    }
});
System.import( 'assets/js/main' ).then( null, console.error.bind( console ) );

应用程序加载了(as described in example 1 here):

error TS2307: Cannot find module 'angular2/core'

在编译时,我总是得到(某种经典)错误

typings install angular --ambient

PHPStorm告诉我它无法解决导入问题:

as described here

即使加载了所有外部库:

curly underline in editor

但是在编译之后(即使出现上述错误)应用程序在浏览器中运行良好。

可能缺少Typescript Definition(TSD)(external libraries in PHPStorm),但不推荐使用tsd。我读到了$.ajax({ type: "POST", data: { 'id': id }, url: 'http::/localhost/my_project/controller/method', success: function(data) { swal({ title: "Deleted", text: "The list has been deleted.", type: "success" }, function(){ location.reload(); }); }, error: function(data) { swal("We cannot delete!", "The file is not deleted.", "error"); } }); ,但我不确定这是否真的有必要(并且它会抛出一堆其他错误link here)。

所以我的问题:

这只是我的设置的副作用(没有node_modules)我可以忽略,还是我必须安装其他东西?

我的环境:

  • node 5.4.1
  • npm 3.3.12
  • tsc 1.8.9
  • Mac OS X 10.11.4
  • PHPStorm 2016.1

我有点失落。任何提示都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您遇到问题,因为TypeScript编译器可以找到Angular2 .d.ts文件。使用NPM安装Angular2时会提供它们(请参阅文件夹.d.ts下的文件node_modules/angular2)。

module文件中设置tsconfig.json属性时,编译器会尝试在node_modules文件夹中找到它们。

您可以注意到在编译源代码时这是一个问题,但是这段代码将被编译,您的应用程序可以运行...

有类似typings和tsd(不建议使用)的工具可以手动安装这些类型,但Angular2并不存在于相应的注册表中。