网站首页 > 博客文章 正文
有时候希望把某一个模块实现称为一个库,但是暂时又不希望把这个库放在另外一个仓库里面。这个时候就可以使用workspace的功能。
首先我们新建一个Node.js项目:
安装一下TypeScript编译器
npm install –save-dev typescript
package.json
{
"name": "ts-workspace",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"typescript": "^4.7.2"
}
}
然后初始化一下TypeScript配置。
npx tsc --init
这个时候会自动创建tsconfig.json
这是我们的主项目,接着我们要建立workspace项目。
npm init --workspace ./my-lib
这里先一路用默认值。
然后就跳入./my-lib目录,安装TypeScript编译器和初始化TypeScript配置,方法和前面一样。
完整后的目录结构如下:
接着我们在my-lib目录下面建一个index.ts,用于创建一个TypeScript接口。
export interface MyConfig {
getName: () => string;
}
在./my-lib的package.json里面添加build脚本:
运行npm run build,就可以产生对应的index.js文件了。
TypeScript除了要产生js文件,还需要产生一个index.d.ts声明文件。
修改tsconfig.json,然后去掉”declaration”配置的注释。
再运行npm run build,就可以看到index.d.ts文件也生成了。
接着还要在my-lib文件夹里面的package.json,添加”types”字段,用于告诉TypeScript,类型声明文件是刚才生成的index.d.ts。
这样my-lib这个库就做完了。
但是要在主仓库里面使用,还需要回到主仓库,运行npm install
他会自动在主目录的node_modules目录下面建立一个my-lib的symbol link。
这样主程序就能使用my-lib这个库了。
写一小段程序使用一下my-lib暴露的那个interface。
import { MyConfig } from "my-lib";
class MyClass implements MyConfig {
getName = () => {
return "ABC";
}
}
const m = new MyClass();
console.log(m.getName());
引用都没有问题。
把模块临时放在workspace里面,可以使代码更模块化,同时也为模块稳定之后,移入一个正式的单独仓库做准备。
猜你喜欢
- 2025-08-02 强大的可视化流程图编辑神器 — LogicFlow
- 2025-08-02 前端框架太卷了!字节企业级框架Arco Design Mobile开源了
- 2025-08-02 Vue独立组件——11个最佳Vue.js日期选择器组件
- 2025-08-02 PouchDB - 免费开源的 JavaScript 数据库,用于离线保存数据
- 2025-08-02 安装Vue.js,搭建Vue环境
- 2025-08-02 Node.js 原生支持 TypeScript?开发者需要了解的一切
- 2025-08-02 小白都看得懂的Vue3.0语法教程-01-框架搭建
- 2025-08-02 Gulp 介绍与安装
- 2025-08-02 用户说 | 手把手体验通义灵码 2.0 AI 程序员如何让我进阶“架构师”?
- 2025-08-02 Vue应用性能优化实战:8 个提升页面加载速度的关键策略
你 发表评论:
欢迎- 08-06nginx 反向代理
- 08-06跨表插入连续的日期,sheetsname函数#excel技巧
- 08-06初中生也能学的编程,不走弯路,先用后学
- 08-06find命令的“七种武器”:远不止-name和-type
- 08-06恶意代码常见的编程方式
- 08-06kali2021ping 外网不通
- 08-06因为一个函数strtok踩坑,我被老工程师无情嘲笑了
- 08-06hadoop集群搭建详细方法
- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- powershellfor (73)
- messagesource (71)
- plsql64位 (73)
- vueproxytable (64)
- npminstallsave (63)
- #NAME? (61)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- nacos启动失败 (64)
- ssh-add (70)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- qcombobox样式表 (68)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)