简介
@erquhart/lerna-package 是一个基于 lerna 的 npm 包,用于管理 monorepo 的 packages。
安装
你可以使用 npm 或 yarn 进行安装:
# npm $ npm install @erquhart/lerna-package # yarn $ yarn add @erquhart/lerna-package
使用
初始化
在 monorepo 的根目录下运行以下命令来初始化 lerna:
$ npx lerna init
添加一个 package:
$ npx lerna create @my-scope/my-package
配置
在 monorepo 的根目录下创建 lerna.json
文件作为 lerna 的配置文件,其中应包含以下内容:
{ "packages": [ "packages/*" ], "version": "independent", "npmClient": "npm", "useWorkspaces": true }
其中 "packages/*"
是 package 存放的目录,"version": "independent"
表示每个 package 的版本可以单独管理,"npmClient": "npm"
表示使用 npm 作为 npmClient,"useWorkspaces": true
表示使用 yarn workspaces 或者 npm workspaces,方便 monorepo 管理。
package.json 配置
在 package.json 中添加以下内容:
-- -------------------- ---- ------- - ------- ----------------------- ---------- -------- ---------- - -------- ---- --- ----------- ------------ ---- -- --------------------- -- ------------------- - -------- ---------- ------------ --------- - -
其中 "name": "@my-scope/my-package"
是 package 的名称,"version": "0.0.1"
是 package 的初始版本号,"scripts"
中的 build
和 build:lib
都是为了打包输出 js 文件的命令,这里以 tsc(TypeScript 编译器)举例,而 "peerDependencies"
是声明该 package 需要的 peerDependencies。
发布
在 monorepo 的根目录下运行以下命令来发布 packages:
$ npx lerna publish
示例代码
一个简单的示例代码,假设 monorepo 的根目录为 /my-monorepo
,package 存放的目录为 /my-monorepo/packages/my-package
,src 目录下有个 index.tsx
:
import React from 'react'; export const MyComponent = () => { return ( <h1>Hello, World!</h1> ); };
打包后输出 lib
目录下的 index.js
:
-- -------------------- ---- ------- ---- -------- ------------------------------ ------------- - ------ ---- --- --- ----- - ----------------- --- ----------- - -------- -- - ------ -------------------------- ----- ------- ---------- -- ------------------- - ------------ --- -----------------------------
这样就可以将 package 发布到 npm 了,其他包括该 package 的工程需要通过 npm install @my-scope/my-package
来进行安装和引入。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedaf48b5cbfe1ea0610fce