node.js - 创建一个 Typescript NPM 库
问题描述
我的项目中有一个models
目录 ( my-models
),其中包含我的应用程序的一些重要的打字稿类。
我一直在应用程序中毫无问题地使用它,现在我想把它做成一个 npm 包,这样我就可以将它导入另一个项目。
这就是我试图做的:
- 目录中的 npm init
my-models
(包含我所有模型和类的目录) - 目录中的 npm 链接
my-models
(包含我所有的模型和类的那个) my-models
另一个“客户端”项目的根目录中的npm 链接- 在客户端项目的某些文件中导入 * from "my-models"
我遇到的问题是,无论我做什么,我都找不到一种方法来共享我所有的 Typescript 类并在另一个项目中使用它们。我在编译我的库时遇到了麻烦,然后当我编译它时,我无法在我的客户端项目中导入类。我收到此错误:
`File '.../services/my-models/index.d.ts' 不是 module.ts(2306)
这是 package.json 的my-models
:
{
"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 目录:
所以不确定我是否做错了什么或如何正确地做。感谢任何帮助
解决方案
我使用 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?
推荐阅读
- python - 网格搜索和交叉验证 SVM
- angular - D3 Angular - 错误 TS2349:无法调用类型缺少调用签名的表达式。类型
- android - 是否可以从 python raspberry pi/ubuntu 访问 SD 卡图像或目录
- arrays - 如何将数组的每个元素压缩到ruby中另一个数组的每个元素?
- java - 试图调用方法我得到 java.lang.IndexOutOfBoundsException
- google-photos - Google Photo API - 按名称获取文件
- javascript - 将图像变量传递给数据库
- c# - 使用 XmlUriResolver 为远程共享提供凭据
- javascript - React hook useEffect 永远/无限循环连续运行
- database - 您如何在数据库关系模式中处理递归关系 N:M