2016-03-03 34 views
6

因此,我在将jspm软件包导入到typescript时发现的大多数例子都假定我想使用Systemjs在浏览器中加载和解释它们。但是,我宁愿使用tsc来构建commonjs模块,并且只导入js代码,因为在我看来,这对我来说似乎是更一般和防错的方法。typescript:import jspm libraries

所以我的目录结构是这样的:

src/index.ts 
jspm_packages/... 
config.js 
tsconfig.json 

随着具有下列内容tsconfig:

{ 
    "compilerOptions": { 
    "target": "es5", 
    "module": "commonjs", 
    "noEmitOnError": true, 
    "noImplicitAny": false, 
    "rootDir": "src", 
    "outDir": "target/app", 
    "sourceMap": true, 
    "experimentalDecorators": true, 
    "emitDecoratorMetadata": true, 
    "declaration": true 
    }, 
    "exclude": [ 
    "jspm_packages", 
    "node_modules", 
    "typings", 
    "target" 
    ] 
} 

出于测试目的,我jspm install npm:angular2安装角2,并试图将其导入我的index.ts via import { bootstrap } from 'angular2/platform/browser';

当运行tsc时,出现错误

src/index.ts(1,27): error TS2307: Cannot find module 'angular2/platform/browser'. 

现在我想知道,我可以让打印机知道jspm-packages吗?我觉得我尝试了一切,从tsconfig排除列表中删除jspm_packages,切换到节点模块分辨率或systemjs模块生成。也许我只是没有找到正确的组合。接下来要尝试的任何提示?

+0

从JSPM网站第一行是“_jspm对于SystemJS通用模块加载程序的软件包管理器,建立在动态ES6模块loader_之上”。我不认为没有system.js的情况下使用jspm是正确的方法。 –

回答

2

我也在努力解决这个问题,经过一番研究之后,我发现没有好的解决方案来允许这个问题。

解决方法:

A)可以复制你的依赖,并与故宫安装。自从npm解析以后,tsc不应该抛出任何错误。 B)更改您的tsconfig.json并将角度映射到jspm路径。例如

"baseUrl": ".", 
"paths": { 
    "angular2/*": [ 
     "jspm_packages/npm/[email protected]/*" 
    ], 
    "rxjs/*": [ 
     "jspm_packages/npm/[email protected]/*" 
    ] 
    } 

查看https://github.com/frankwallis/plugin-typescript/tree/master/examples/angular2的完整示例。

请注意,“baseUrl”和“路径”不是官方属性,仅在打字稿编译器的beta版本上。

的问题,目前正在这里追踪: https://github.com/Microsoft/TypeScript/issues/6012

+0

我发现这太难了,因为intellij也无法识别路径选项。我以相反的方式做,并将jspm指向node_modules – rweng