mkdir my-demo # 创建项目文件
npm init -y # 在项目目录下初始化
npm i -g lerna # 全局安装lerna
lerna init # 初始化
lerna create core # package name 为 @my-demo/core
lerna create utils # package name 为 @my-demo/utils
我们经常可以看到@angular
、@ionic
他们的包, 都可以以@开头,那么我们的可不可以,原来angular、ionic
都属于一个组织(Organization
)只有新创建一个Organization
组织之后,才能创建@testorg/testpackname
这样的包(除非使用npm用户名的方式如@username/package,否则是无法提交),当包名以@your-name
开头时,npm publish
会默认发布为私有包,但是 npm 的私有包需要付费!!!package.json中name为@my-demo/core这种方式,my-demo则为组织名称,需要在npm上创建一个对应的组织,可以避免名字的重复。若包发布不上去检查下这个组织是否已经建立。
core/package.json 中dependencies 添加@my-demo/utils的依赖。
通过lerna link链接到本地库
git维护代码版本,仓库连接上了(git remote -v)
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/daly-young/lerna-demo.git
git push -u origin master
npm login
package.json中添加publishConfig设置为公有库
"publishConfig": {
//publishConfig决定了我们发布包发布到哪里去,此时发布包就不是往 www.npmjs.com/ 了
"registry": "https://registry.npm.taobao.org/"
},
//改成 去掉淘宝镜像
"publishConfig": {
"access": "public" //等于--access public, 不加这个等于默认
},
或者npm config set registry https://registry.npmjs.org/
lerna publish from git/package
或者 npm publish --access public // 公开包发布
只能发布public公有的包,否则得认证
lerna publish做哪些事情
运行lerna updated来决定哪一个包需要被publish
如果有必要,将会更新lerna.json中的version
将所有更新过的的包中的package.json的version字段更新
将所有更新过的包中的依赖更新
为新版本创建一个git commit或tag
将包publish到npm上
如果要更新版本,需要先git上面提交代码,并且修改package.json
里面的"version": "1.1.0"
,否则无法再次提交。
1、 426 Upgrade Required - PUT http://registry.npmjs.org/
大意是,从2021年10月4日开始,所有前往 npm registry 的连接,都需要使用 TLS 1.2 了.
因此,我把命名行改成使用 https,旧的错误消息就消失了
npm config set registry=https://registry.npmjs.org
2、You should bug the author to publish it (or use the name yourself!)
npm login 登录
3、package.json requires a valid "version" field
package.json 添加version版本字段
4、403 Forbidden - PUT https://registry.npmjs.org/@tyh%2ftest - Forbidden
这里使用name: @org/core的方式提交,但是npm上没有注册对应的org,这里是测试就改成name:core就可以提交