npm私有化仓库
为什么要搭建npm仓库
日常开发中, 经常会遇到各项目间会用到同样的功能模块、组件, 如果不抽成公共模块,那就只能CV大法,我们常规操作发布npm包,但是npm是公开的(当然Npm也提供私有化付费服务),相当于所有人都能看到你这个包里的内容并取之用之, 如果是跟业务强相关的显然不适合,这时候私有Npm服务登场。
私有npm的优势
1.安全性(布署在内网,资产安全性高)
2.复用性,开发效率,版本管理(立足之根本)
3.下载速度提升
4.技术资产积累
私有Npm有哪些
1.Npm 付费服务
2.Sinopia(不再维护)
3.Verdaccio(基于Sinopia)
4.cnpm: https://cnpmjs.org
Verdaccio
image.png使用npm发布包
设置npm镜像地址
npm config set registry http://115.29.207.86:4888/
使用nrm(推荐)
npm install -g nrm
nrm add ymyh http://115.29.207.86:4888/
nrm use ymyh
登录私有化npm账户,不存在就是直接注册账号
执行npm who am i 如果出现自己的账号 则表示npm 登录成功
npm login
Username:
Password:
Email:
在需要上传包的根目录执行 npm publish
访问http://http://115.29.207.86:4888查看自己发布的npm包
npm publish 过滤不想上传的文件
黑名单模式:.npmignore文件,没有.npmignore情况下使用.gitignore文件。
白名单模式:package.json里边配置files字段(只上传dist和src/components下的文件,package.json文件是必须上传的)
"files": [
"dist",
"src/components"
],
打包纯js npm包示例
image.pngpackage.json配置
{
"name": "@sj/format", //npm install 下载时的包名
"version": "1.0.0", //版本
"description": "数据格式化",
"main": "format.js", //打包入口文件
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "hjj",
"license": "ISC",
"dependencies": { //依赖包
}
}
打包vue组件示例
首先在导出文件index.js中import vue组件
通过install方法实现组件全局注册(也可不注册直接导出组件)
import CommonSelect from './cell-input.vue'
const components = {
// 通过install来安装组件
install(Vue) {
Vue.component(
CommonSelect.name, CommonSelect
)
}
}
if (typeof window !== 'undefined' && window.Vue) {
window.Vue.use(components)
}
export default components
...
}
cd 到组件目录下,在package.json文件中配置要上传的包信息
image.png
{
"name": "@sj/cell-input",
"version": "1.0.0",
"description": "输入框",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"common",
"wgt"
],
"author": "hjj",
"license": "ISC",
"dependencies": {
"vant": "^2.12.4"
}
}
执行npm publish 上传包
npm注意事项
1、包的package.json中包名必须以 @sj/....开头
//package.json
{
"name": "@sj/select",
"version": "1.0.1"
}
2、更新版本的时候版本号必须递增 version": "1.0.12
3、纯js npm包,如果包内有其他的npm包依赖,需要在dependencies中依赖声明,项目在install该包时才会同时下载依赖包
//package.json
{
{
"name": "@sj/scp-push",
"version": "1.0.2",
...
"dependencies": {
"scp2": "^0.5.0"
}
}
}