您好,登录后才能下订单哦!
今天小编给大家分享一下JS前端架构pnpm怎么构建Monorepo方式管理demo的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
Q:什么是Monorepo?
A:Monorepo是一种项目管理方式,就是把多个项目放在一个仓库里面,可以参考神三元大佬的一篇文章:现代前端工程为什么越来越离不开 Monorepo?,这篇文章中介绍了Monorepo的概念、收益以及MulitRepo的弊端。
Q:什么是pnpm?
A:pnpm就是一个包管理工具,原生支持Monorepo,比npm和yarn更快一些,其他的可以参考官网和另一篇文章:为什么现在我更推荐 pnpm 而不是 npm/yarn?
现在我们就开始使用pnpm来构建一个Monorepo,在正事开始之前,你先需要保证你的电脑中具有Node.js,我的版本的是16.9.0
。
首先你需要有pnpm这个工具,安装的话可以从官网找方法,或者直接使用npm安装,命令如下:
npm i pnpm -g
现在我们开始搞事情。
第一步,创建一个项目的根目录,这里就叫monorepo-demo
,咋创建都可,这里使用的是命令:
mkdir monorepo-demo
第二步,初始化package.json
,这个没啥说的,命令如下:
pnpm init
这里我对内容做了一点修改,package.json
的内容如下:
{ "name": "monorepo-demo", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "type": "module", "keywords": [], "author": "ywanzhou", "license": "MIT" }
这里我主要添加了一个type
字段,这里我使用ESModule模块化规范。
第三步,创建pnpm-workspace.yaml
文件,这个文件定义了工作空间的根目录,内容如下:
packages: - 'packages/ **'
现在我们就可以在packages
中创建多个项目了,目录结构如下:
monorepo-demo ├── package.json ├── packages │ ├── components │ │ ├── index.js │ │ └── package.json │ ├── core │ │ ├── index.js │ │ └── package.json │ ├── utils │ │ ├── index.js │ │ └── package.json ├── pnpm-lock.yaml └── pnpm-workspace.yaml
第四步,编写每个项目的package.json
,其实主要是编写一下名称,方便以后使用,这里我的如下:
{ "name": "@packages/components", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "type": "module", "license": "ISC", "dependencies": { "lodash": "^4.17.21", "@packages/utils": "workspace:^1.0.0" } }
剩余的两个名称分别为@packages/core
和@packages/utils
。
其实到这基本工作就准备好了,现在介绍一下如何安装依赖,如何在packageA中引用packageB。
就这个demo来说,我们如果在根目录下安装依赖的话,这个依赖可以在所有的packages中使用,如果我们需要为具体的一个package安装依赖怎么办?
cd到package的所在目录嘛?漏,大漏特漏,我们可以通过下面这个命令:
pnpm --filter <package_selector> <command>
例如我们需要在@packages/components
安装lodash,命令如下:
pnpm -F @packages/components add lodash
-F
等价于--filter
现在我们在往@packages/utils
中安装一个dayjs
,命令如下:
pnpm --filter @packages/utils add dayjs
现在我们就来实现package间的相互引用,首先我们在@packages/utils/index.js
中写入如下内容:
import dayjs from 'dayjs' export function format(time, f = 'YYYY-MM-DD') { return dayjs(time).format(f) }
然后我们执行如下命令:
pnpm -F @packages/components add @packages/utils@*
这个命令表示在@packages/components
安装@packages/utils
,其中的@*
表示默认同步最新版本,省去每次都要同步最新版本的问题。
安装完成后@packages/components/package.json
内容如下:
{ "name": "@packages/components", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "type": "module", "license": "ISC", "dependencies": { "@packages/utils": "workspace: *", "lodash": "^4.17.21" } }
然后我们在@packages/components/index.js
写入如下内容:
import { format } from '@packages/utils' console.log(format(new Date()))
然后我们在项目根目录运行如下命令
node packages/components
即可打印出当前的日期。
以上就是“JS前端架构pnpm怎么构建Monorepo方式管理demo”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。