【发布时间】:2018-01-07 23:57:54
【问题描述】:
我已经编写了一组 Typescript 类,我将它们作为 NPM 模块发布到我们的内部包服务器。我的其他项目能够使用 NPM 检索此依赖项。
我想以这样一种方式发布类,以便我可以通过引用包本身来导入它们,类似于我正在使用的其他一些包,例如 Angular。
import { SomeClass } from 'mylibrary'
这是我目前的设置:
我写了一个./mylibrary.d.ts 文件:
export * from './dist/foldera/folderb'
//etc
./package.json:
"name": "mylibrary",
"main": "mylibrary.d.ts",
"files": [
"mylibrary.d.ts",
"dist/"
],
"types": "mylibrary.d.ts",
//ommitted other settings
src/tsconfig.json:
{
"compileOnSave": false,
"compilerOptions": {
"outDir": "../dist/",
"baseUrl": "src",
"sourceMap": true,
"declaration": true,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2016",
"dom"
]
}
}
当我尝试使用所需的语法导入包时,MS VS Code 说一切正常,但运行我的项目会导致一个相当神秘的错误消息:
Module build failed: Error: Debug Failure. False expression: Output generation failed
我对模块、命名空间和包的术语感到迷茫。非常感谢任何帮助。
【问题讨论】:
-
一个观察结果是
package.json中的"main"设置应该引用.js文件(可能在dist目录中)而不是mylibrary.d.ts。 -
@cartant 这应该是编译的
.js文件吗?这个文件应该是模块声明吗?我读了这篇文章,但由于它们没有显示任何文件内容,很遗憾它没有太大帮助。 -
通常,您会将
.ts文件编译为.d.ts和.js文件 - 这就是分发的内容。而main将指向入口点.js文件,typings将指向相应的.d.ts文件。这是一个更好的参考:typescriptlang.org/docs/handbook/declaration-files/…
标签: node.js typescript npm