npm 对于大多数前端开发来说早已经不在陌生,是否也想过拥有一个自己的npm 包,提供给自己或者别人使用;
npm 本质和理解
NPM的全称是Node Package Manager,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准
npm 包的发布和管理,可以简单理解为上传代码和下载并使用它们。这样可以快速的发布代码哈哈
前期准备
1、需要有一个账户,毕竟是要传到别人的服务器上,注册地址:
https://www.npmjs.com/
记住注册账户的名字和密码,npm 发布的时候要用,当然还有其他用处;
2,准备需要发布的代码,没有代码发布啥,当然空的文件也可以发,只是没有用处,因为npm包可以理解为上传代码。
准备 npm 发布的代码
如果你已经有代码了,就看一下注意的点就可以了。如果没有,可以像下面一样写一个测试的,达到最终知道如何发布,和发布代码的时候注意事项即可
1、一定要有一个package.json 文件和在根目录同级
这个文件可以通过 npm init 实现,也可以自己随便找个复制修改,没有具体要求,但是文件名字一定是package.json ,需要注意的有如下几个点一定要有
1.1 name 字段一定要有,用来告诉别人和npm服务器这个包的名字叫什么,引用的时候也只能是这个名字,同时这个名字全球唯一,不能重复,不然发布会失败,因此赶快去抢占名字吧,哈哈
"name": "lmqtest",
1.2 version 表示版本号,为了记录修复记录和升级,一般要求必须有
"version": "1.0.0"
version 一般小问题修复 都是在 最后一个数添加版本,大的升级才会使用到前面的位数
1.3 main 字段 这个是致命的重要 ,入口的地址,这个包的指向入口
"main": "index.js"
main 入口的配置可以是同个目录的任何文件,只要这个js对外提供了接口就可以
剩下的可以酌情自己看看一下我的
{
"name": "lmqtest",
"version": "1.0.0",
"description": "对axios二次封装",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"木子了前端",
"write"
],
"files": [
"dist",
"lib",
"example"
],
"author": "木子聊前端",
"license": "ISC",
"dependencies": {
},
"devDependencies": {
}
}
一个对外提供对外调用的js文件
这个文件一般通过es6 的export 对外提供方法或者对象,或者叫暴露接口吧,这个js文件就入口地址main对应的,逻辑可以写在这个js文件,也可以写在其他目录下面,最后通过,这个js文件对外提供方法,这个文件名字随便写,有些人喜欢叫index.js ;
格式
export default function(){
// 省略代码
}
或者
export {
}
却别 是否提供默认方法而已,具体的业务方法因具体需要而定
现在只想写一个试试可以这样
export default function(){
console.log('我是一个npm测试包');
}
npm 发布
整理一下代码和目录结果目前大概是这个样子
lmqtest–根目录
index.js --入口js文件和逻辑
packge.json – 配置文件
进入的我们的 根目录 在命令模式下
1、npm adduser 用户名、密码、邮箱)-- 注册帐号
2、npm publish(发布到npmjs.org) 这个就表示上传了。 专业叫发是发布
不出意外一切正常的话就发布成功了。过1分钟左右登录到 https://www.npmjs.com/ 可以看到自己发布的包。
npm 使用
那么就可以像使用其他人包一样 npm i lmqtest 下载下来使用了
import tests from ‘lmqtest’
tests() // 我是一个npm测试包
发布出错的可能
遇到403
ERR! publish Failed PUT 403
npm ERR! code E403
npm ERR! no_perms Private mode enable, only admin can publish this module:...
大概是镜像库的问题,必须是官网才行
检查
npm config get registry
// https://registry.npm.taobao.org/
如果是淘宝或者其他的,那么设置为官网
npm config set registry=http://registry.npmjs.org
发布完成之后可以在设置回去 这个是全局设置
npm config set registry=https://registry.npm.taobao.org/
403的另外一种情况 更新了代码但是没有更改版本号也会报错,因此在更改代码之后一定要修改版本号
npm ERR! code E403
npm ERR! 403 403 Forbidden - PUT http://registry.npmjs.org/lmqhttp - You cannot publish over the previously published versions: 1.0.1.
npm ERR! 403 In most cases, you or one of your dependencies are requesting
npm ERR! 403 a package version that is forbidden by your security policy.
其他情况不大可能出错,因为就是一个上传的过程,除了上传地址错误很少有其他的
其他补充
1、发布npm包为的是代码更加友好的使用和模块化,没有其他神话
2、发布的过程已经下载的依赖包不用上传也就是 node_modules 是不用发布,当执行 npm install 的时候会自动下载,只需要在package.json 里面标注版本即可
3、README.md 这个可以加上,这是一个说明文件,虽然非必须,但是可以写明 怎么使用,有什么用关于当前包
https://github.com/chinaynlmq-a/lmqhttp.git
这个地址是比较完整的可以看看