- 'test-module'是使用index.d.ts定义文件在Typescript中编写的外部模块 . 它在package.json中具有tsd / tsc的属性:
“typings”:“dist / index.d.ts”,“typescript”:{“definition”:“dist / index.d.ts”}
-
'test-module'随JSPM一起安装在jspm_packages / npm / test-module中,用于使用SystemJS进行动态加载
-
'app'是要导入'test-module'的Typescript应用程序,如下所示:
从'test-module'导入;
问题是'test-module'模块在两个位置都有:
在 node_modules _for_in文件编译器中的
- (否则它找不到'test-module'并在从'test-module'编译导入时出错)
在 jspm_packages
- 中,SystemJS在运行时加载它
所以,我需要在package.json'dependencies'和'jspm / dependencies'中插入它
有没有黑客:
A)强制JSPM / SystemJS只使用标准的 node_modules 文件夹? (我知道我可以使用原始的SystemJS并映射node_modules,但这意味着我必须为依赖的每个依赖关系和依赖关系映射它,这是很多手工工作)
OR
B)使用某种路径映射强制使用Typescript搜索模块(我猜版本1.8将具有此功能)
有任何想法吗?
1 回答
这是我不喜欢的答案,但这是一个解决方法 . 事实上,在搜索我的案例答案时,我遇到了你的问题,它们是相似的 .
在我的例子中,我也创建了一个外部库,该库使用typescript编译,生成的模块将在外部jspm项目中使用 .
对我有用的是使用与javascript es6相同的语法导入库 . 假设该库名为myLib并且具有myLib = blabla的config.js映射,并且您有一个名为notify.js的文件(从typescript生成) . 进口是
在运行时它可以工作,但问题是项目的编译器找不到'myLib/notify' . typescript生成的定义(库的文件 jspm_package/github/myLib/myLib@version/notify.d.ts 类似于:
为了解决这个问题,我手动修改了库声明中的定义包装:
我的 tsconfig.json 文件配置为在jspm_packages中查找定义
然后编译停止警告,Atom编辑器提供intellisense .
这种方法存在两个问题:
手动制作包装(这很烦人)
myLib 在定义中是手写的,并且可以通过SystemJS和jspm覆盖't be changed for other location, we must use import ' myLib / bla ' and in reality ' myLib'到其他引用 .
我正在搜索的是一种使用模块声明自动生成打字稿定义的方法 .
我遇到了这个https://www.npmjs.com/package/autodts但是我不完全理解它是如何工作的,但它可以用来以这种方式自动生成定义文件 .
编辑:
我创建了一个gulp任务来编辑typescript定义文件并添加自动添加声明模块 . 方法如下:
paths.js