目前只用到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使用初体验相关推荐

  1. 苹果电脑安装python3密码_mac系统安装Python3初体验

    前沿 对于iOS开发不要随便拆卸系统自带的Python,因为有很多 library 还是使用 Python2.7. 1 安装Xcode 1.1 App Store 搜索Xcode 并安装 1.2 安装 ...

  2. MapReduce编程初体验

    需求:在给定的文本文件中统计输出每一个单词出现的总次数 第一步: 准备一个aaa.txt文本文档 第二步: 在文本文档中随便写入一些测试数据,这里我写入的是 hello,world,hadoop he ...

  3. 小程序 缩放_缩放流星应用程序的初体验

    小程序 缩放 by Elie Steinbock 埃莉·斯坦博克(Elie Steinbock) 缩放流星应用程序的初体验 (First Experiences Scaling a Meteor Ap ...

  4. wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验

    wxWidgets刚開始学习的人导引全文件夹   PDF版及附件下载 1 前言 2 下载.安装wxWidgets 3 wxWidgets应用程序初体验 4 wxWidgets学习资料及利用方法指导 5 ...

  5. 用鸿蒙跑了个 “hello world”!鸿蒙开发初体验

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源 | https://my.oschina.net/u ...

  6. Windows Embedded Standard开发初体验(二)

    支持Silverlight的Windows Embedded Standard 好了,完成安装之后,我们就可以来做Windows Embedded Standard的第一个操作系统镜像了.在开始菜单中 ...

  7. 深度探索Hyperledger技术与应用之超级账本初体验(附部署代码)

    2019独角兽企业重金招聘Python工程师标准>>> 本章零基础地介绍了如何快速体验超级账本搭建的区块链网络,我们先绕过了比较复杂的初始化配置,用官方提供的fabric-sampl ...

  8. Spring环境搭建,IoC容器初体验~

    由于最近的任务是关于IoC配置文件格式的转换,所以需要从Spring的IoC容器开始学起,今天根据网上的介绍搭建了Spring环境,并对其IoC容器进行了初体验.文章中涉及到的软件以及推荐的一本关于S ...

  9. 来自新手Banana Pi香蕉派初体验

    2019独角兽企业重金招聘Python工程师标准>>> 一.前言 一段时间来对有强大的技术支持和完善的社区的Raspberry Pi很感兴趣,本想入一片学习学习,但转念一想Raspb ...

最新文章

  1. 物理理论发展放缓?这是一种认知误判
  2. 为什么你不该用Timer
  3. Linux下不同命令的区别与联系(cat和vi/vim和nano)
  4. 利用RTL2832u电视棒芯片追踪民航飞机轨迹
  5. simpledateformat格式_如何使用SimpleDateFormat?
  6. LAMP搭建discuz
  7. OSGI开发web应用
  8. PyQt5的信号和槽
  9. linux打印显示etc中的文件,Linux命令之文件内容查看(cat、tac、nl、more、less、head、tail)...
  10. Ubuntu 12.04下Pomelo开发环境搭建(转)
  11. python---之super()继承,解决钻石继承难题
  12. 易筋SpringBoot 2.2 | 第廿九篇:SpringBoot之RPC入门到精通
  13. (三)微信小程序云开发之微信支付全解
  14. 如何让双十一数据大屏讲出故事?设计有口诀
  15. 图纸打印什么时候用蓝图_为什么工程图纸都是蓝色的?是叫“蓝图”吗?
  16. JAVASCRIPT精彩200例
  17. K.im团队与Kim Dotcom AMA直播回顾
  18. 跟着团子学SAP EPPM: CPM主要底表
  19. 展开运算符在项目中的轻度运用
  20. android开发用什么操作系统,Android是目前世界上最流行的操作系统

热门文章

  1. 百分六用计算机该怎么算,24975000的百分之五是多少,用计算器怎么算?
  2. 使用canvas画美队盾牌
  3. 【前端面试题】2021秋招+金九银十,看完这些就够了 最新前端面试总结 68道前端面试题,助你进大厂
  4. 法兰克机器人循环编程_原来可以这样编写Fanuc机器人程序!
  5. 针对开发者的云端真三维GIS开放平台 — DataEarth 平台介绍
  6. u盘正常接入后计算机无法看到,U盘连接到电脑之后,电脑无反应怎么办?
  7. HTTPS证书基本概述
  8. 遗传算法(三)——基本遗传算法
  9. 图的割点(解释及实现)
  10. ERP中的制造数据结构