1. 前提&说明
安装node.js
说明:本篇文章提到的指令等都是Mac
的,在Windows
可能有些不同。
2. 注册npm账号
首先得有一个npm
账号 注册地址
3. 开始写我们的模块
因为我们发布的包不能与已有的npm
模块名冲突,所以建议先检查一下我们想创建的包是否名字重复。
校验地址 ,在此页面中搜索你想创建的npm模块名称,看是否已经存在。
开始创建我们的项目:(我发布了一个正则校验的模块,以这个为例)
mkdir regexpForYou
cd regexpForYou
npm init
// package name 为我们发布后的npm模块名字
// 其他项可以默认,直接回车即可
4. 项目目录结构
先看一下项目目录结构,部分文件稍后会提到
├── lib // npm run build生成的文件
| ├── index.js
├── src // 项目源码
| ├── index.js
├── test // 测试用例
| ├── test.js
├── .babelrc
├── package.json
├── README.md
5. 项目的一些配置
- 安装babel
因为我们在src
目录写的时候,用到es6
的语法,所以需要用Babel
编译。
npm install --save-dev babel-cli
npm install --save-dev babel-preset-es2015
新建配置.babelrc
, 配置 .babelrc
{
"presets": ["es2015"]
}
我们把 src
目录里的代码编译到 lib
目录,然后我们在 package.json
里,把 "main" 改为 "lib/index.js",这样对外暴露出去的代码就不会出现兼容性问题。
修改package.json
文件的scripts
"scripts": {
"build": "babel src -d lib"
}
这样运行npm run build
就会编译源文件到 lib
目录了
6. src文件编写
在src
目录下,新建reg.js
、index.js
// reg.js
export const AmountReg = /^-?(\d|([1-9]\d+))(\.?\d{1,2})?$/
export const PIntReg = /^(\d|([1-9]\d+))$/
export const PNIntReg = /^-?(\d|([1-9]\d+))$/
// index.js
import * as REG from './reg'
export function testAmount(str) {
return REG.AmountReg.test(str)
}
export function testPIntReg(str) {
return REG.PIntReg.test(str)
}
export function testPNIntReg(str) {
return REG.PNIntReg.test(str)
}
7. 单元测试
为了保证发布质量,需要写单元测试,这里我们使用 mocha
和 chai
做测试
npm install mocha chai --save-dev
新建test
文件夹,test.js
文件
// test.js
const chai = require('chai')
const should = chai.should()
const regTest = require('../lib/index')
describe("测试正负两位小数正则",() => {
it('test -2.33 should equal true',() => {
regTest.testAmount('-2.33').should.equal(true)
})
})
describe("测试正负两位小数正则",() => {
it('test -2.333 should equal false',() => {
regTest.testAmount('-2.333').should.equal(false)
})
})
describe("测试正整数",() => {
it('test -2 should equal false',() => {
regTest.testPIntReg('-2').should.equal(false)
})
})
describe("测试正整数",() => {
it('test 2 should equal true',() => {
regTest.testPIntReg('2').should.equal(true)
})
})
describe("测试正负整数",() => {
it('test -2 should equal true',() => {
regTest.testPNIntReg('-2').should.equal(true)
})
})
describe("测试正负整数",() => {
it('test 2 should equal true',() => {
regTest.testPNIntReg('2').should.equal(true)
})
})
describe("测试正负整数",() => {
it('test 2.22 should equal false',() => {
regTest.testPNIntReg('2.22').should.equal(false)
})
})
修改package.json
文件的scripts
"scripts": {
"test": "npm run build && mocha -t 5000"
}
在终端执行npm run test
,看到执行结果
测试正负两位小数正则
✓ test -2.33 should equal true
测试正负两位小数正则
✓ test -2.333 should equal false
测试正整数
✓ test -2 should equal false
测试正整数
✓ test 2 should equal true
测试正负整数
✓ test -2 should equal true
测试正负整数
✓ test 2 should equal true
测试正负整数
✓ test 2.22 should equal false
7 passing (8ms)
8. 发布自己的npm模块
- 首次上传:
npm login
// 根据提示输入之前注册的账号、密码
// 发布npm包:
npm publish
- 更新自己的NPM包:
npm version patch
npm publish
// npm version后面参数说明:
// patch:小变动,比如修复bug等,版本号变动 v1.0.0->v1.0.1
// minor:增加新功能,不影响现有功能,版本号变动 v1.0.0->v1.1.0
// major:破坏模块对向后的兼容性,版本号变动 v1.0.0->v2.0.0
9. 使用自己发布的模块
npm install --save regexp-for-you
const regexp = require('regexp-for-you');
console.log(regexp.testAmount('-2.333'))
运行示例代码:node test.js
,输出 false
,和预期一致。
网友评论