npm 发包过程中遇到的问题及解决方案


theme: fancy

hi!我是麦谷,今天我来讲讲如何发布自己的npm包。我在开发过程中使用的开源包都来自npm,那么我如何利用node发布自己的开源包呢?这篇文章将分享我在发布自己的开源包过程中遇到的问题及解决方案。

环境准备

node.js

在编写自己的开源包之前,确保自己已经安装了node开发环境,这是node.js的官网地址:

https://nodejs.org/zh-cn/

可以选择安装一个稳定的版本。我们已经有了自己的开发环境了,如何管理我们的node.js版本呢?接下来我会介绍到node.js版本管理神器nvm。

nvm

相较于只配置一个开发环境,我更倾向于利用nvm来管理node.js开发环境的版本。nvm:

https://github.com/nvm-sh/nvm/tree/v0.39.2

利用nvm可以更好的管理我们的node.js的版本。关于如何利用nvm管理我们的node.js版本,可以看看github上的文档说明,这里不再细讲。虽然我已经可以有效管理我的node.js版本,但是我无法快速切换下载源,如何解决这个问题?这时候,我会使用另一个下载源切换工具nrm。nrm:

npm install -g nrm 或npm i -g nrm 

安装好nrm后,我可以快速切换下载源。这里整理一下常用的几个nrm命令:

  1. 查看当前可用下载源
nrm ls 

image.png
2. 使用对应的下载源,例如使用淘宝镜像源

nrm use taobao

image.png
3.新增一个下载源,例如新增一个叫 np 的下载源

nrm add np https://registry.npmjs.com/

! 这里需要注意格式 nrm add [自定义name] [下载源地址]

image.png

  1. 删除一个下载源,例如删除 np 下载源
del np

image.png

虽然我已经搭建好了对应的开发环境,但是作为新手的我该怎么搭建发包的项目结构呢?这时候,我从大量的文章中找到了一个开源神器tsdx。tsdx:

https://github.com/jaredpalmer/tsdx

通过几行简单的命令就可以快速搭建发包的项目结构:

tips: 这里引用下官方的命令~

npx tsdx create mylib
cd mylib
yarn start

执行完上面的命令后,我就可以在src/index.ts文件下编写我想要的包了!

发布npm包

登录npm

我已经写好我的npm包了,我要如何发布呢?首先我需要在npm上注册一个npm账号,这里不再具体讲解注册流程。我通过执行:

npm login 或 npm adduser

登录npm账号。这里着重记录下我登录过程中遇到的问题:

  1. 从网上获取的常见问题及解决方案(我在发包过程中几乎没有遇到)
1、npm版本过低,处理:npm install -g npm update

2、可能权限原因,处理:npm publish --access=public

3、npm 源不对,处理:npm config set registry https://registry.npmjs.org/    --   有些非官方源个人可能无权发布,比如淘宝镜像需要admin权限

4、文件夹名和package.json里的'name'属性一样时也无法发布,处理:将文件夹名或'name'改成不一致即可

5、如果之前删除过npm市场同名的包,重新发布会有一定的时间限禁(目前是24小时后)

6、记得检查账户是否登录

2.实际操作过程中遇到的问题
出现频率最高的问题及解决方案:

'proxy' config is set properly. See: 'npm help config'

这里估计是代理有点问题
解决方案一
(1)先查找一下自己的代理

npm config get proxy
npm config get npm config get https-proxy
npm config get registry

(2)然后将代理和缓存置空

npm config set proxy false
npm cache clean --force

或者

npm config set proxy null
npm config set https-proxy null

这个时候登录或许会出现新的问题!

npm ERR! network request to http://registry.cnpmjs.org/-/v1/login failed, reason: getaddrinfo ENOTFOUND registry.cnpmjs.org

并且伴随新的提示信息:

npm notice Beginning October 4, 2021, all connections to the npm registry - including for package installation - must use TLS 1.2 or higher. You are currently using plaintext http to connect. Please visit the GitHub blog for more information: https://github.blog/2021-08-23-npm-registry-deprecating-tls-1-0-tls-1-1/

tips: 因为从2021年10月4日开始,所有与npm网站和npm注册表的连接(包括软件包安装)必须使用TLS 1.2或更高版本 原文链接

我执行了官方给出的命令,使用了TLS 1.2。见到下面的提示,就带包已经更行成功了。

Hello! The tls-test package was successfully downloaded and installed.
Congratulations! Your package manager appears to support TLS 1.2.

一切准备就绪,我以为很快就能发布成功了。结果又出现了新的问题,还是第一个问题。我再次检查了我的配置是否正确

image.png
我确定已经没有问题了,可就是发布失败!我想想是不是node版本的问题。于是我利用nvm工具修改了使用node的版本。

image.png
版本切换后,我通过

npm login

已经成功登陆npm账号,接着在需要发布的npm包下执行

npm publish

待npm包上传完,npm包就正式发布成功。

总结

1.如何发布自己的npm包;
2.如何解决切换下载源的问题;
3.如何快速切换node版本;
4.如何解决npm登录过程的一些问题。

后记

这是我自己总结的时间处理工具包:
us-chrouns

https://www.npmjs.com/package/us-chrouns

tips: 工具还太少,文档不是很完善。目前内置了判断美国夏令时和冬令时的方法,以及一个对文章发表过去时间的计算。

这篇文章就到此为止,如果你在发布包过程中遇到什么问题,欢迎在评论区留言。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容