目录
3.报错:完成账户登录,npm publish发布时再次报错
npm是JavaScript运行时环境的默认包包管理器,全称是Node Package Manager,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。
在实际开发中,我们使用到的依赖库大多是第三方提供的,如果我们想要以作者的身份开发属于自己的开发包,并将其发布到世界仓库。
①我们需要在npm官网注册属于自己的账户,只需要提供用户名、密码、邮箱号即可,
②本地准备好一个package 包,流程为:
# 创建一个用于放置package 包的文件夹
mkdir dirname
# 切换到目标文件夹
cd dirname
# 初始化
npm init
然后创建入口文件,默认为index.js,并编写实际的代码片段,使用modules.export命令将其导出即可,
- {
- "name": "npm-package-xtest",
- "version": "1.0.0",
- "description": "a test npm package",
- "main": "index.js",
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "author": "xwd",
- "license": "ISC"
- }
- modules.export = {
- dateTimeFormatter:function(dateStr){
- const date = new Date(dateStr);
- return `${date.getFullYear()}-${date.getMonth()+1}-${date.getDate()} ${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`;
- }
- }
③使用npm public命令,发布创建好的个人package包。
如果显示如下内容,即为发布成功。
④测试发布好的个人package包。
# 创建一个测试文件夹
mkdir test_folder
# 切换到测试文件夹
mkdir test_folder
# 初始化
npm init
# 安装个人发布的package包
npm install npm-package-xtest
如下所示,即为安装成功,
⑤使用package包。
- const xtest = require("npm-package-xtest");
- console.log(xtest);
看到如下信息,提示报错,是我们自定义的包有问题。
⑥修复package包与包的升级
上述报错,提示的个人的package包存在语法错误,那么我们如何修复呢?
首先找到自己的包,修复语法错误,为如下这一版内容,
- module.exports = {
- dateTimeFormatter:function(dateStr){
- const date = new Date(dateStr);
- return `${date.getFullYear()}-${date.getMonth()+1}-${date.getDate()} ${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`;
- }
- }
然后使用命令行,执行命令:npm version patch,使其版本号自增(注意:不要手动修改package.json文件中的version版本号),可以看到,版本号已经变为v1.0.1了。
接下来,继续使用命令:npm publish,更新仓库中的包,
如下为在npm官网搜索结果中,显示的package包的详细内容,
⑦项目依赖:package的升级
接下来,我们在测试项目中升级npm-package-xtest依赖的版本, 如下图,当前为v1.0.0有缺陷的版本,
执行命令,查看当前依赖npm-package-xtest的所有版本信息,
继续使用命令:npm update npm-package-xtest,将其更新到最新的1.0.1版本,
⑧重新测试,执行node main.js,运行脚本文件,正常执行,
- const xtest = require("npm-package-xtest");
- console.log(xtest);//打印模块
-
- //测试代码
- const date = new Date();
- const dateFormatterStr = xtest.dateTimeFormatter(date.toISOString());
- console.log(dateFormatterStr);
报错原因:未登录个人npm账户,执行命令:npm addser,按照提示信息完成登录即可。
报错原因:可设置了npm的淘宝镜像,需要执行命令如下命令,切换到原始仓库。再次登录即可。
npm config set registry https://registry.npmjs.org/
报错原因:package的包名x-test重复,可以在npm官网搜索,显示相同的包名已经被使用过了,换一个未被使用过的package包名即可。
部分小伙伴可能会发现,上面,我们在测试项目中使用npm update npm-package-xtest命令更新依赖包时,package-lock.json文件中npm-package-xtest的版本号已经更新(实际上:此时再使用require命令导入npm-package-xtest依赖时,调用的就是最新版本的代码),package.json文件中dependencies中包含的npm-package-xtest子项版本仍然是v1.0.0,没有得到更新,那么,如何解决这个问题呢?
可以执行命令如下,用于更新dependencies中所声明的依赖项版本号。
npm update -S npm-package-xtest
PS:想要更新package.json文件中声明的的版本号,可以继续了解如下内容,
"dependencies"表示开发和上线都需要的第三方包,用-S
"devdependencies"表示仅在开发阶段需要的第三方包,用-D
因此,在安装或者更新时,可根据实际需要添加-S -D前缀,来将信息写入/更新到指定的dependencies或者devdependencies节点下。