【问题标题】:Publish Typescript classes as npm package将 Typescript 类发布为 npm 包
【发布时间】: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


【解决方案1】:

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

这种方法的不利方面是,你的包每次都会和你的项目一起编译,TS环境的可能变化可能导致无法编译整个项目(我在版本上编译我的一个包时遇到问题

// index.ts
export { Class1 } from 'src/Class1'
export { Class2 } from 'src/Class2'

【讨论】:

  • 现在这解决了我的问题,因为它是一个内部项目,可以将其用作 TS 文件。谢谢!
  • 为需要它的人提供源代码,但也分发构建的工件
猜你喜欢
  • 2022-11-11
  • 2016-12-18
  • 2021-06-18
  • 2019-07-26
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 2022-06-27
相关资源
最近更新 更多