将Typescript类发布为npm包

Bor*_*ijk 5 node.js npm typescript

我已经编写了一组Typescript类,它们将作为NPM模块发布到我们的内部包服务器中。我的其他项目能够使用NPM检索此依赖关系。

我想以这样一种方式发布类:可以通过引用包本身来导入它们,类似于我正在使用的其他一些包,例如Angular。

import { SomeClass } from 'mylibrary'
Run Code Online (Sandbox Code Playgroud)

这是我当前的设置:

我写了一个./mylibrary.d.ts文件:

export * from './dist/foldera/folderb'
//etc
Run Code Online (Sandbox Code Playgroud)

./package.json

"name": "mylibrary",
"main": "mylibrary.d.ts",
"files": [
  "mylibrary.d.ts",
  "dist/"
],
"types": "mylibrary.d.ts",
//ommitted other settings
Run Code Online (Sandbox Code Playgroud)

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"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用所需的语法导入包时,MS VS Code表示一切正常,但是运行我的项目会产生相当隐秘的错误消息:

Module build failed: Error: Debug Failure. False expression: Output generation failed
Run Code Online (Sandbox Code Playgroud)

我感到迷失在模块,名称空间和包的行话中。任何帮助是极大的赞赏。

Dan*_*hko 5

如果您将 index.ts 文件放在包的根文件夹中(与 package.json 相同级别),以便它从 src/ 文件夹重新导出所有功能,那么您可以在不构建到 js 的情况下发布它,保持请记住,它只会在 TS 项目中使用。

这种方法的缺点是,你的包每次都会和你的项目一起编译,TS环境可能的变化可能导致无法编译整个项目(我在版本< 2.4.2上编译我的一个包时遇到问题, 例如)。

// index.ts
export { Class1 } from 'src/Class1'
export { Class2 } from 'src/Class2'
Run Code Online (Sandbox Code Playgroud)

  • 包括那些想要它但也分发构建工件的人的源代码 (3认同)