node文件如何寫成npm包并發(fā)布出去

這篇文章主要介紹了node文件如何寫成npm包并發(fā)布出去,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)是一家專業(yè)提供靈武企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、網(wǎng)站制作、html5、小程序制作等業(yè)務(wù)。10年已為靈武眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進行中。

把node文件拷貝寫成npm包,并發(fā)布

npm插件發(fā)布

發(fā)布npm其實是一件很簡單的事情,只是因為長時間不發(fā)布會忘記,又得上網(wǎng)去查一下,所以就寫篇文章記錄一下。

新建文件目錄

  • 新建目錄,取名任意

  • 運行命令生成package.json

npm init --yes

安裝依賴

如果項目中還需要其他依賴,可以向正常開發(fā)時一樣通過npm install xxx安裝 不過這里有一點需要注意的是,-S、--save--save-dev的區(qū)別,因為通常在開發(fā)項目的時候這三個是沒有什么本質(zhì)區(qū)別的,但是在開發(fā)npm包的還是有區(qū)別的

  • -S--save下載的插件會被寫入dependencies,并且我們在安裝自定義的插件時,會一塊被下載

  • --save-dev下載的插件會被寫入devDendencies,這個只是在開發(fā)的時候使用,并不會隨著自定義插件一塊被安裝

完善package.json

有幾個重要的信息是一定要填寫的

  • name 別人安裝這個插件需要通過 npm install xxx,來安裝這個xxx對應(yīng)的是namevalue

  • version 插件的版本,每次重新發(fā)布都需要重新這個版本后,不然發(fā)布會失敗

  • main 入口文件

其他可以看需要填寫

{
"name": "node-fs-copy", //發(fā)布的包名,默認是上級文件夾名。不得與現(xiàn)在npm中的包名重復(fù)。包名不能有大寫字母/空格/下滑線!
  "version": "1.0.0",//你這個包的版本,默認是1.0.0。對于npm包的版本號有著一系列的規(guī)則,模塊的版本號采用X.Y.Z的格式,具體體現(xiàn)為:
  1、修復(fù)bug,小改動,增加z。
  2、增加新特性,可向后兼容,增加y
  3、有很大的改動,無法向下兼容,增加x
  "description": "",
  "main": "index.js",//入口文件,默認是Index.js,可以修改成自己的文件,這個很重要,當你在實際項目使用的時候,let a = require("包名"),它就去會去找對應(yīng)的文件路徑哦。
  "scripts": {                  // 快捷命令,在package.json同目錄下輸入命令 npm run 鍵 就會執(zhí)行 相對應(yīng)的命令
    "bulid": "npx webpack --config myConfig.js"  //例如 輸入 npm run bulid 就會執(zhí)行npx webpack --config myConfig.js的命令 。
  },
  "keywords": [ // npm搜索的關(guān)鍵字
     "node",
     "fs",
     "copy"
  ],
  "publishConfig": {
    "registry": "" // 發(fā)布的npm地址
  },
  "repository": {
      "type": "git",
      "url": "git+https://github.com/xxxx" // 代碼的git地址
  },
  "author": "zxw",
  "license": "ISC",//這個直接回車,開源文件協(xié)議吧,也可以是MIT,看需要吧。
  "dependencies": {             // 生產(chǎn)環(huán)境所依賴的包
    "jquery": "^3.4.1",
    "sea": "^1.0.2"
  },
  "devDependencies": {          // 開發(fā)環(huán)境所依賴的包
    "webpack": "^4.41.6"
  }
}

確定入口文件為index.js之后,并寫入代碼,注意引入和導(dǎo)出都需要通過node的方式

  • index.js

const { exists, copyDir} = require('./lib/copy')

const fsCopy = (sourcePath, deptPath)=> {
  exists(sourcePath,deptPath, copyDir)
}

module.exports = {
  fsCopy
}
  • /lib/copy.js

const fs = require('fs')

/**
 * 復(fù)制一個文件夾下的文件到另一個文件夾
 * @param src 源文件夾,即需要寫出的文件
 * @param dst 目標文件夾,需要寫入的文件
 */
const copyDir = function (src, dst) {
  // 讀取目錄中的所有文件/目錄
  fs.readdir(src, function (err, paths) {
    if (err) {
      throw err
    }
    paths.forEach(function (path) {
      const _src = src + '/' + path
      const _dst = dst + '/' + path
      let readable;
      let writable
      fs.stat(_src, function (err, st) {
        if (err) {
          throw err
        }
        // 判斷是否為文件
        if (st.isFile()) {
          // 創(chuàng)建讀取流
          readable = fs.createReadStream(_src)
          // 創(chuàng)建寫入流
          writable = fs.createWriteStream(_dst)
          // 通過管道來傳輸流
          readable.pipe(writable)
        }
        // 如果是目錄則遞歸調(diào)用自身
        else if (st.isDirectory()) {
          exists(_src, _dst, copyDir)
        }
      })
    })
  })
}
/*
* 判斷當前目標文件是否存在
* 如若不存在需要先進行創(chuàng)建
* */
const exists = function (src, dst, callback) {
  // 如果路徑存在,則返回 true,否則返回 false。
  if (fs.existsSync(dst)) {
    callback(src, dst)
  } else {
    fs.mkdir(dst, function () {
      callback(src, dst)
    })
  }
}

module.exports = {
  exists,
  copyDir
}

測試

這一塊我只是進行了比較簡單的測試,后續(xù)我會專門補一章關(guān)于插件測試的文章

發(fā)布

  • 注冊npm賬號,通常npm可以通過關(guān)聯(lián)gitlab直接登錄

  • 確定你當前的鏡像指向npm鏡像而不是淘寶鏡像,如果不確定可以直接執(zhí)行

npm config set registry https://registry.npmjs.org/
  • 運行添加用戶命令,依次輸入用戶,密碼,郵箱。

npm addUser

node文件如何寫成npm包并發(fā)布出去

  • 確保當前npm已經(jīng)在瀏覽器登錄情況下執(zhí)行發(fā)布命令

npm publish

node文件如何寫成npm包并發(fā)布出去

如圖就是發(fā)布成功了

發(fā)布報錯

如果發(fā)布遇到403報錯,很有可能是你的包名即package.json里面的name字段與npm已經(jīng)有的插件名重復(fù)了,需要修改一下再重新發(fā)布

修改過名字依然報錯, You cannot publish over the previously published versions: xxx,說明這個版本已經(jīng)在npm存在,需要修改版本號

迭代

后續(xù)內(nèi)容如果有變動,每次重新發(fā)布的時候,都需要手動的更改package.json/version的版本號,然后在執(zhí)行發(fā)布的命令

使用示例

安裝

npm install node-fs-copy

在node代碼中,本地拷貝測試

const { fsCopy } = require('node-fs-copy')
// 把內(nèi)容從本地D盤的test/test目錄,拷貝到test/test1目錄
fsCopy('d:/test/test', 'd:/test/test1')

服務(wù)器代碼拷貝

本地是沒有辦法直接拷貝服務(wù)器代碼的,如果需要拷貝服務(wù)器代碼,需要滿足一個條件

  • node服務(wù)端代碼,與需要拷貝的文件在一個服務(wù)器上

比如作者的的服務(wù)器上的文件地址為/data/code-generator,node服務(wù)也部署在同一服務(wù)器的另一個目錄內(nèi)

//在服務(wù)器上運行,表示把服務(wù)器的/data/code-generator文件內(nèi)的內(nèi)容,拷貝到當前項目的./temporary/test內(nèi)
fsCopy('/data/code-generator', './temporary/test')

完成拷貝后,可以使用打包插件把該內(nèi)容壓縮成zip包,輸出到前端,然后刪除該臨時文件./temporary/test,再刪除zip包

附上常用命令

npm init --yes(初始化配置)

npm i (會根據(jù)package.json里面的鍵dependencies,devDependencies來安裝相對應(yīng)的包)

npm i 包(默認安裝一個最新的包,這個包在node_modules文件夾里面,并且會更新在你的package.json文件)

npm i 包@3.0.0(安裝一個指定版本的包,會更新在你的package.json文件)

npm i 包 --save-dev(安裝一個開發(fā)環(huán)境所需要的包,會更新在你的package.json文件)

npm uninstall 包(卸載一個包,會更新在你的package.json文件)

npm update 包(更新此包版本為最新版本,會更新在你的package.json文件)

npm run 腳本鍵(會根據(jù)package.json里面的"scripts"里面的腳本鍵自動執(zhí)行相對于的值)

npm publish  (根據(jù)package.json的name發(fā)布一個包)

npm unpublish 包名 --force(卸載npm網(wǎng)站上自己上傳的包)

感謝你能夠認真閱讀完這篇文章,希望小編分享的“node文件如何寫成npm包并發(fā)布出去”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

文章題目:node文件如何寫成npm包并發(fā)布出去
文章出自:http://bm7419.com/article12/gihhgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站移動網(wǎng)站建設(shè)、面包屑導(dǎo)航、企業(yè)網(wǎng)站制作微信小程序、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司