来源:https://www.kai666666.com/2019/06/15/建立自己的npm镜像服务器/
安装nodejs
这里默认已经安装好了nodejs,并且配置好了nodejs的各项配置.
安装verdaccio
npm install verdaccio
启动verdaccio
npx verdaccio
输出
(node:11200) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
info --- config file - C:\Users\rkey\.config\verdaccio\config.yaml
info --- the "crypt" algorithm is deprecated consider switch to "bcrypt" in the configuration file. Read the documentation for additional details
info --- using htpasswd file: C:\Users\rkey\.config\verdaccio\htpasswd
info --- plugin successfully loaded: verdaccio-htpasswd
info --- plugin successfully loaded: verdaccio-audit
打开C:\Users\%USERNAME%\.config\verdaccio\config.yaml
,
然后在最下面添加一行:listen: 0.0.0.0:4873
。
另外我们的国内的镜像源一般是使用淘宝镜像去下载东西的,那么可以把我们的镜像源的来源设置为淘宝的镜像源,这样可以提高国内的下载速度。做法也是修改这个配置文件,找到uplinks
下面两行把url替换一下,具体的如下:
# a list of other known repositories we can talk to
uplinks
配置好后就大功告成了,把配置文件保存一下,然后重启verdaccio
(命令行中Ctrl + C
,然后重新运行verdaccio
命令)。
此时可以在浏览器键入http://你的IP:4873/
或者http://localhost:4873/
来访问管理页面。
切换到我们的镜像源
切换镜像源很简单,只要一行代码就搞定:
npm config set registry http://你的IP:4873/
当然为了更好的对镜像源管理我建议使用nrm
来切换:
npm install nrm
npx nrm add verdaccio http://你的IP:4873/
npx nrm use verdaccio
这里我把我们的镜像源命名为verdaccio
,你也可以定义为你喜欢的名字,公司内部建议使用公司的名称。你也可以使用nrm ls
查看所有镜像源,还可以使用nrm use XXX
换成镜像源列表中的其他镜像源。
使用pm2启动
我们上面直接运行命令verdaccio
启动的,这样是没问题的,有的时候为了更加严谨的方式可以使用pm2
。pm2
是一款非常优秀的进程管理工具,使用方式也很简单,我们这里就直接使用它启动了,更多使用方法可以看
npm install pm2
npx pm2 start verdaccio
上传一个依赖包
说了这么多我们现在可以开发一个自己的包,然后上传到我们的镜像源上。 首先切换到我们自己的源上,然后添加用户(我们镜像源上的用户不是npm镜像源中的用户)。添加用户使用下面命令,然后依次输入用户名、密码、邮箱。输入密码的时候是看不到字符的,尽管输入就可以了。当操作完了会输出一行日志Logged in as orange on http://你的IP:4873/.
表示创建用户并登录成功了。
npm adduser
此时你也可以使用npm whoami
查看你是否登录成功了。
此时你可以创建一个依赖包,然后上传上去了。我们来定义一个依赖包的名称,比如就叫my-package
,找一个目录输入下面命令:
mkdir my-package
cd my-package
npm init
npm init
后会让你输入其他的配置项,比如包名是my-package
,其他的直接按回车,最后输入一个yes
就可以了。此时你会看到目录下多了一个文件夹叫my-package
里面有个文件package.json
。
接下来我们在my-package
文件夹下,创建一个index.js
的文件。输入下面的代码,当然如果想输入其他的就看自己的喜好了:
module.exports = function (){
console.log(`Hello World!`);
}
此时我们已经创建好了一个非常简单的包,然后我们可以上传了,使用shell/cmd进入我们的my-package
目录,然后输入命令:
npm publish
此时如果看到+ my-package@1.0.0
说明已经上传成功了,你可以用浏览器打开http://你的IP:4873/
你会发现确实多了一个包。
如果你在之后上传的时候一定要修改package.json
的version
字段,并且要大于现在,否则不能上传。也可以使用命令npm version 1.0.1
直接修改版本号。
使用开发好的依赖包
现在我们使用我们的依赖包,首先在与my-package
同级目录下再建一个文件夹,比如叫use-package
。同样使用npm init
去初始化我们的项目。并且创建一个index.js
的文件。
此时你可以安装我们刚才发布的那个包了:
npm install my-package
并且在index.js
中输入以下代码:
const helloWorld = require('my-package')
helloWorld()
此时大功告成,在shell/cmd中打开use-package
文件夹,然后输入命令node index
,如果看到Hello World!
说明我们上传的依赖已经可以使用了。
安装nrm
npm install nrm
npx nrm ls
npx nrm use verdaccio
设置npm在从注册表中获取包时超时前等待的最短时间(以毫秒为单位)。默认值为10000毫秒(10秒),
您可以将其设置为500毫秒或更短的时间。例如:
npm config set fetch-retry-mintimeout 500
设置npm在从注册表中获取包时超时前等待的最长时间(以毫秒为单位)。默认值为10000毫秒(10秒),您可以将其设置为500或更短的时间。例如:
npm config set fetch-retry-maxtimeout 500
npm pack webpack --registry=https://registry.npm.taobao.org
上传下载好的webpack包到自己本地搭建的npm仓库:
npm publish webpack-5.97.1.tgz --registry=http://localhost:4873
删除指定包的所有版本.比如我不小心发布了一个名为5的空包,想要删除掉怎么办?如果执行一次不行,就执行2次,第一次可能会提示你这是强制删除
npm unpublish 5 --force
删除指定包的指定版本,比如我想删除5的0.0.1的版本,如果执行一次不行,就执行2次,第一次可能会提示你这是强制删除
npm unpublish 5@0.0.1 --force