發(fā)布自己的npm模塊

1. 前提&說明

安裝node.js
說明:本篇文章提到的指令等都是Mac的,在Windows可能有些不同。

2. 注冊(cè)npm賬號(hào)

首先得有一個(gè)npm賬號(hào) 注冊(cè)地址

3. 開始寫我們的模塊

因?yàn)槲覀儼l(fā)布的包不能與已有的npm模塊名沖突,所以建議先檢查一下我們想創(chuàng)建的包是否名字重復(fù)。
校驗(yàn)地址 ,在此頁面中搜索你想創(chuàng)建的npm模塊名稱,看是否已經(jīng)存在。

開始創(chuàng)建我們的項(xiàng)目:(我發(fā)布了一個(gè)正則校驗(yàn)的模塊,以這個(gè)為例)

mkdir regexpForYou
cd regexpForYou
npm init
// package name 為我們發(fā)布后的npm模塊名字
// 其他項(xiàng)可以默認(rèn),直接回車即可

4. 項(xiàng)目目錄結(jié)構(gòu)

先看一下項(xiàng)目目錄結(jié)構(gòu),部分文件稍后會(huì)提到

├── lib // npm run build生成的文件
| ├── index.js
├── src // 項(xiàng)目源碼
| ├── index.js
├── test // 測(cè)試用例
| ├── test.js
├── .babelrc
├── package.json
├── README.md

5. 項(xiàng)目的一些配置

  • 安裝babel

因?yàn)槲覀冊(cè)?code>src目錄寫的時(shí)候,用到es6的語法,所以需要用Babel編譯。

npm install --save-dev babel-cli
npm install --save-dev babel-preset-es2015

新建配置.babelrc, 配置 .babelrc

{
  "presets": ["es2015"]
}

我們把 src 目錄里的代碼編譯到 lib 目錄,然后我們?cè)?package.json 里,把 "main" 改為 "lib/index.js",這樣對(duì)外暴露出去的代碼就不會(huì)出現(xiàn)兼容性問題。

修改package.json文件的scripts

"scripts": {
    "build": "babel src -d lib"
}

這樣運(yùn)行npm run build就會(huì)編譯源文件到 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. 單元測(cè)試

為了保證發(fā)布質(zhì)量,需要寫單元測(cè)試,這里我們使用 mochachai 做測(cè)試

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("測(cè)試正負(fù)兩位小數(shù)正則",() => {
    it('test -2.33 should equal true',() => {
        regTest.testAmount('-2.33').should.equal(true)
    })
})

describe("測(cè)試正負(fù)兩位小數(shù)正則",() => {
    it('test -2.333 should equal false',() => {
        regTest.testAmount('-2.333').should.equal(false)
    })
})

describe("測(cè)試正整數(shù)",() => {
    it('test -2 should equal false',() => {
        regTest.testPIntReg('-2').should.equal(false)
    })
})

describe("測(cè)試正整數(shù)",() => {
    it('test 2 should equal true',() => {
        regTest.testPIntReg('2').should.equal(true)
    })
})

describe("測(cè)試正負(fù)整數(shù)",() => {
    it('test -2 should equal true',() => {
        regTest.testPNIntReg('-2').should.equal(true)
    })
})

describe("測(cè)試正負(fù)整數(shù)",() => {
    it('test 2 should equal true',() => {
        regTest.testPNIntReg('2').should.equal(true)
    })
})

describe("測(cè)試正負(fù)整數(shù)",() => {
    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"
}

在終端執(zhí)行npm run test,看到執(zhí)行結(jié)果

測(cè)試正負(fù)兩位小數(shù)正則
    ? test -2.33 should equal true

  測(cè)試正負(fù)兩位小數(shù)正則
    ? test -2.333 should equal false

  測(cè)試正整數(shù)
    ? test -2 should equal false

  測(cè)試正整數(shù)
    ? test 2 should equal true

  測(cè)試正負(fù)整數(shù)
    ? test -2 should equal true

  測(cè)試正負(fù)整數(shù)
    ? test 2 should equal true

  測(cè)試正負(fù)整數(shù)
    ? test 2.22 should equal false


  7 passing (8ms)

8. 發(fā)布自己的npm模塊

  • 首次上傳:
npm login
// 根據(jù)提示輸入之前注冊(cè)的賬號(hào)、密碼
// 發(fā)布npm包:
npm publish
  • 更新自己的NPM包:
npm version patch
npm publish
// npm version后面參數(shù)說明:
// patch:小變動(dòng),比如修復(fù)bug等,版本號(hào)變動(dòng) v1.0.0->v1.0.1
// minor:增加新功能,不影響現(xiàn)有功能,版本號(hào)變動(dòng) v1.0.0->v1.1.0
// major:破壞模塊對(duì)向后的兼容性,版本號(hào)變動(dòng) v1.0.0->v2.0.0

9. 使用自己發(fā)布的模塊

npm install --save regexp-for-you
const regexp = require('regexp-for-you');
console.log(regexp.testAmount('-2.333'))

運(yùn)行示例代碼:node test.js ,輸出 false,和預(yù)期一致。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容