【问题标题】:Creating a Typescript NPM library创建一个 Typescript NPM 库
【发布时间】:2020-10-21 10:40:23
【问题描述】:

我的项目中有一个modelsdirectory (my-models),其中包含我的应用程序的一些重要的打字稿类。

我一直在应用程序中使用它,没有任何问题,现在我想把它做成一个 npm 包,这样我就可以将它导入另一个项目。

这是我尝试做的:

  1. my-models 目录中的 npm init(包含我所有 模型和类)
  2. my-models 目录中的 npm 链接(包含我所有模型和类的目录)
  3. npm link my-models 在另一个“客户端”项目的根目录中
  4. 在客户端项目的某些文件中从“my-models”导入 *

我遇到的问题是,无论我做什么,我都找不到一种方法来共享我所有的 Typescript 类并在另一个项目中使用它们。我在编译我的库时遇到了麻烦,然后当我编译它时,我无法在我的客户端项目中导入类。我收到此错误:

`文件'.../services/my-models/index.d.ts'不是module.ts(2306)

这是my-models的package.json:

{
    "name": "my-models",
    "version": "0.9.0",
    "description": "API Client and models",
    "main": "dist/main.js",
    "types": "index.d.ts",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "dependencies": {
        "axios": "^0.19.0",
        "@types/axios": "^0.14.0"
    },
    "devDependencies": {
        "typescript": "^3.9.5"
    }
}

这是我的客户项目中的一个导入,我尝试导入我的一个模型:

import { Student } from 'my-models'

但是等等,我有点让它起作用了:

import { Student } from 'my-models/dist/main'

为什么?我在my-models的package.json中说dist/main.js是主文件,为什么我不能只从“my-models”导入*?

顺便说一句,这是 my-models/dist 目录:

所以不确定我是否做错了什么或如何正确地做。感谢任何帮助

【问题讨论】:

  • dist 是否真的包含在你的 npm 包中?您可以通过查看 node_modules 来仔细检查。如果它不存在,您应该使用package.json 中的files 属性来创建您希望包含在npm 包中的所有内容的列表。
  • 另外,这是一个私有的 npm 包吗?包是如何包含的?
  • 是的,这是一个私有包,包含你的 dist/
  • 它是如何包含的?我在您的 package.json 中没有看到 files 属性。您是否使用 npmjs.org、github 包或其他主机来安装此包?
  • 在观看了 Basarat Ali 的这段视频后,我终于成功了:youtu.be/jJNIuBTAb6Q

标签: node.js reactjs typescript npm


【解决方案1】:

我使用 Angular CLI 来构建 NPM 库,即使它们不是 Angular 项目。您只需从 package.json 文件中删除 Angular 依赖项,就可以为您设置一个世界级的 TypeScript 项目,并提供一个很棒的测试管道。

npm install --global @angular/cli
ng new my-lib --create-application=false

cd my-lib
ng generate library my-lib

生成库后,您可以进入 projects/my-lib/src 目录打开 package.json 文件并摆脱 Angular 依赖项。现在你有一个空白的 TypeScript 项目。

ng build my-lib 将构建它

ng test my-lib 将运行单元测试

cd 到 dist/my-lib 文件夹,你可以npm publish 直接到 npm。

既然可以利用 Angular 团队的工作,为什么还要手动构建 TypeScript?

【讨论】:

  • 有趣的...会试一试。但是,这种方法并不能帮助我理解为什么我构建包的方式不起作用。
猜你喜欢
  • 2019-08-08
  • 2019-08-13
  • 2019-06-18
  • 2019-10-06
  • 2020-11-12
  • 2019-11-16
  • 1970-01-01
  • 2020-08-10
  • 2018-02-05
相关资源
最近更新 更多