lerna使用初体验
目前只用到lerna最简单的功能,就是新建一个插件,并上传到npm上。之后用到相互依赖包或者其他功能再进行使用记录的完善。
1. 新建包
1.1 全局安装
npm i lerna -g
全局安装之后可以直接使用lerna
命令
1.2 init
在需要的位置lerna init --independent
在生成的lerna.json
中有个"version": "independent"
,区别于直接lerna init
生成的是一个版本号,independent
包可以单独控制版本号,个人认为比较便于管理。如果只是一个包改变没必要让其他包一起升级版本,之前用lerna init
生成的插件库,每次改一个包,其他包莫名其妙就跟着一起升级了,虽然升级的时候指定包可以解决,但是因为是组内人员共同开发的或者是自己忘记了,就很容易混乱。正好看到这个可以独立版本,就尝试一下
下图是在空文件夹中初始化的lerna
下图是在vue
脚手架中初始化的lerna
,就直接在脚手架中执行命令,不会冲突,只是增加了文件
因为我想在发布之前,先在vue脚手架中验证打包之后功能,以后再看能不能放个vuepress
文档
1.3 新增包
lerna create <name>
自动生成以下文件
我一般习惯再新建一个src
文件,在src
文件中编辑代码,再打包生成到lib中
1.4 打包
刚开始我以为只要lerna run build
就可以了,但是控制台提示我没有build这个脚本命令,然后我找了百度,所有的文档都告诉我只要lerna run build
。。。。。我迷茫了
所以为了能打包,在外面用rollup写了个打包js。。。。
1.4.1 安装rollup
目前只有js文件需要打包,所以只安装了压缩js的插件,其余的之后再完善
npm run rollup rollup-plugin-terser --dev
1.4.2 rollup配置项
文件的打包配置代码:
主流程:
import path from 'path';
import fs from 'fs';
import { terser } from 'rollup-plugin-terser'; // 压缩 js 代码const configure = name => {let config = [];if (fs.existsSync(`packages/${name}/src/index.js`)) {// 对每一个进行配置项设置config = genereteJsConfig(name);}return config;
};
export default configure;
配置项
const genereteJsConfig = name => {const paths = {input: `packages/${name}/src/index.js`,output: `packages/${name}/lib`};// plugins 需要注意引用顺序const getPlugins = format => {// 是否为 umd 打包方式const isUmd = format === 'umd';return [isUmd && terser()];};const setRollupMethod = (output, format) => {return {input: paths.input,output: {file: path.join(paths.output, output),format: format,name,globals: {vue: 'vue'}},external: ['vue'], // 指出应将哪些模块视为外部模块plugins: getPlugins()}}// rollup 配置项const rollupConfig = [setRollupMethod('index.esm.js', 'es'),setRollupMethod('index.umd.min.js', 'umd')]return rollupConfig;
};
rollup.config.js
整合文件,本来直接放个图好了,为了下次自己用的时候,可以直接复制,还是把代码放出来了
import fs from 'fs';
import configure from './configure.js';
// const packList = ['ellipsis'] // 指定打包的包名
const packList = [] // 空为全打包
export default () => {let configs =[];for (const name of fs.readdirSync('packages')) {if (packList.length) {if (!packList.includes(name)) continue;}configs = configs.concat(configure(name));}return configs;
}
1.4.3 打包脚本
在最外侧的package.json
中写入执行脚本命令
"build": "rollup -c scripts/rollup.config.js"
执行npm run build
,生成打包后文件
修改包中package.json
中main指向的文件,files中增加src,下载的时候node_modules中就会存在未打包的src文件,方便开发查看;
"access":"public"
表示公开的仓库,不是的可以不加
2. 注册npm官网账户
官网地址:https://www.npmjs.com/
sign in
create account
输入账号密码和邮箱
邮箱会收到一个验证码,输入验证码,验证成功
3. 发布包
现在本地npm login
登录
照理是直接lerna publish
就可以了,但是我是本地测试,没有上传到git仓库,所以lerna publish
会提示我远程仓库没有master分支。所以我是npm publish
的,我也是后来才发现手敲的是npm publish
而不是lerna publish
。。。
npm publish --access public
刚开始package.json
中有access设置了,命令就不用加
3.1 解决报错
刚开始没看懂,直到百度到一篇文章https://blog.51cto.com/u_11711012/4908048
跟着操作就可以了,手机上要下载Authenticator
(我感觉它一直在刷验证码,不知道吃不吃我流量)
然后再publish的时候要输入手机上几秒钟刷新一次的验证码This operation requires a one-time password from your authenticator.
因为我是在最外层执行的命令,可能读取到了最外层的package.json
,所以我cd进了具体的包中,再执行成功了。
我用的是作用域下的包,所以package.json中的name是@npm用户名/包,不然会报错
3. 项目中使用
npm i 包 --dev
import { mountFun, render } from ''包名'
lerna使用初体验相关推荐
- 苹果电脑安装python3密码_mac系统安装Python3初体验
前沿 对于iOS开发不要随便拆卸系统自带的Python,因为有很多 library 还是使用 Python2.7. 1 安装Xcode 1.1 App Store 搜索Xcode 并安装 1.2 安装 ...
- MapReduce编程初体验
需求:在给定的文本文件中统计输出每一个单词出现的总次数 第一步: 准备一个aaa.txt文本文档 第二步: 在文本文档中随便写入一些测试数据,这里我写入的是 hello,world,hadoop he ...
- 小程序 缩放_缩放流星应用程序的初体验
小程序 缩放 by Elie Steinbock 埃莉·斯坦博克(Elie Steinbock) 缩放流星应用程序的初体验 (First Experiences Scaling a Meteor Ap ...
- wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验
wxWidgets刚開始学习的人导引全文件夹 PDF版及附件下载 1 前言 2 下载.安装wxWidgets 3 wxWidgets应用程序初体验 4 wxWidgets学习资料及利用方法指导 5 ...
- 用鸿蒙跑了个 “hello world”!鸿蒙开发初体验
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源 | https://my.oschina.net/u ...
- Windows Embedded Standard开发初体验(二)
支持Silverlight的Windows Embedded Standard 好了,完成安装之后,我们就可以来做Windows Embedded Standard的第一个操作系统镜像了.在开始菜单中 ...
- 深度探索Hyperledger技术与应用之超级账本初体验(附部署代码)
2019独角兽企业重金招聘Python工程师标准>>> 本章零基础地介绍了如何快速体验超级账本搭建的区块链网络,我们先绕过了比较复杂的初始化配置,用官方提供的fabric-sampl ...
- Spring环境搭建,IoC容器初体验~
由于最近的任务是关于IoC配置文件格式的转换,所以需要从Spring的IoC容器开始学起,今天根据网上的介绍搭建了Spring环境,并对其IoC容器进行了初体验.文章中涉及到的软件以及推荐的一本关于S ...
- 来自新手Banana Pi香蕉派初体验
2019独角兽企业重金招聘Python工程师标准>>> 一.前言 一段时间来对有强大的技术支持和完善的社区的Raspberry Pi很感兴趣,本想入一片学习学习,但转念一想Raspb ...
最新文章
- 物理理论发展放缓?这是一种认知误判
- 为什么你不该用Timer
- Linux下不同命令的区别与联系(cat和vi/vim和nano)
- 利用RTL2832u电视棒芯片追踪民航飞机轨迹
- simpledateformat格式_如何使用SimpleDateFormat?
- LAMP搭建discuz
- OSGI开发web应用
- PyQt5的信号和槽
- linux打印显示etc中的文件,Linux命令之文件内容查看(cat、tac、nl、more、less、head、tail)...
- Ubuntu 12.04下Pomelo开发环境搭建(转)
- python---之super()继承,解决钻石继承难题
- 易筋SpringBoot 2.2 | 第廿九篇:SpringBoot之RPC入门到精通
- (三)微信小程序云开发之微信支付全解
- 如何让双十一数据大屏讲出故事?设计有口诀
- 图纸打印什么时候用蓝图_为什么工程图纸都是蓝色的?是叫“蓝图”吗?
- JAVASCRIPT精彩200例
- K.im团队与Kim Dotcom AMA直播回顾
- 跟着团子学SAP EPPM: CPM主要底表
- 展开运算符在项目中的轻度运用
- android开发用什么操作系统,Android是目前世界上最流行的操作系统