這篇文章主要介紹了node文件如何寫成npm包并發(fā)布出去,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
成都創(chuàng)新互聯(lián)是一家專業(yè)提供靈武企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、網(wǎng)站制作、html5、小程序制作等業(yè)務(wù)。10年已為靈武眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。
把node文件拷貝寫成npm包,并發(fā)布
發(fā)布npm其實(shí)是一件很簡(jiǎn)單的事情,只是因?yàn)殚L(zhǎng)時(shí)間不發(fā)布會(huì)忘記,又得上網(wǎng)去查一下,所以就寫篇文章記錄一下。
新建文件目錄
新建目錄,取名任意
運(yùn)行命令生成package.json
npm init --yes
安裝依賴
如果項(xiàng)目中還需要其他依賴,可以向正常開發(fā)時(shí)一樣通過npm install xxx
安裝
不過這里有一點(diǎn)需要注意的是,-S
、--save
和--save-dev
的區(qū)別,因?yàn)橥ǔT陂_發(fā)項(xiàng)目的時(shí)候這三個(gè)是沒有什么本質(zhì)區(qū)別的,但是在開發(fā)npm包
的還是有區(qū)別的
-S
和--save
下載的插件會(huì)被寫入dependencies
,并且我們?cè)诎惭b自定義的插件時(shí),會(huì)一塊被下載
--save-dev
下載的插件會(huì)被寫入devDendencies
,這個(gè)只是在開發(fā)的時(shí)候使用,并不會(huì)隨著自定義插件一塊被安裝
完善package.json
有幾個(gè)重要的信息是一定要填寫的
name
別人安裝這個(gè)插件需要通過 npm install xxx
,來安裝這個(gè)xxx
對(duì)應(yīng)的是name
的value
version
插件的版本,每次重新發(fā)布都需要重新這個(gè)版本后,不然發(fā)布會(huì)失敗
main
入口文件
其他可以看需要填寫
{ "name": "node-fs-copy", //發(fā)布的包名,默認(rèn)是上級(jí)文件夾名。不得與現(xiàn)在npm中的包名重復(fù)。包名不能有大寫字母/空格/下滑線! "version": "1.0.0",//你這個(gè)包的版本,默認(rèn)是1.0.0。對(duì)于npm包的版本號(hào)有著一系列的規(guī)則,模塊的版本號(hào)采用X.Y.Z的格式,具體體現(xiàn)為: 1、修復(fù)bug,小改動(dòng),增加z。 2、增加新特性,可向后兼容,增加y 3、有很大的改動(dòng),無法向下兼容,增加x "description": "", "main": "index.js",//入口文件,默認(rèn)是Index.js,可以修改成自己的文件,這個(gè)很重要,當(dāng)你在實(shí)際項(xiàng)目使用的時(shí)候,let a = require("包名"),它就去會(huì)去找對(duì)應(yīng)的文件路徑哦。 "scripts": { // 快捷命令,在package.json同目錄下輸入命令 npm run 鍵 就會(huì)執(zhí)行 相對(duì)應(yīng)的命令 "bulid": "npx webpack --config myConfig.js" //例如 輸入 npm run bulid 就會(huì)執(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",//這個(gè)直接回車,開源文件協(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ù)制一個(gè)文件夾下的文件到另一個(gè)文件夾 * @param src 源文件夾,即需要寫出的文件 * @param dst 目標(biāo)文件夾,需要寫入的文件 */ 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) } }) }) }) } /* * 判斷當(dāng)前目標(biāo)文件是否存在 * 如若不存在需要先進(jìn)行創(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 }
測(cè)試
這一塊我只是進(jìn)行了比較簡(jiǎn)單的測(cè)試,后續(xù)我會(huì)專門補(bǔ)一章關(guān)于插件測(cè)試的文章
發(fā)布
注冊(cè)npm賬號(hào),通常npm可以通過關(guān)聯(lián)gitlab直接登錄
確定你當(dāng)前的鏡像指向npm鏡像而不是淘寶鏡像,如果不確定可以直接執(zhí)行
npm config set registry https://registry.npmjs.org/
運(yùn)行添加用戶命令,依次輸入用戶,密碼,郵箱。
npm addUser
確保當(dāng)前npm已經(jīng)在瀏覽器登錄情況下執(zhí)行發(fā)布命令
npm publish
如圖就是發(fā)布成功了
發(fā)布報(bào)錯(cuò)
如果發(fā)布遇到403
報(bào)錯(cuò),很有可能是你的包名即package.json
里面的name
字段與npm
已經(jīng)有的插件名重復(fù)了,需要修改一下再重新發(fā)布
修改過名字依然報(bào)錯(cuò), You cannot publish over the previously published versions: xxx
,說明這個(gè)版本已經(jīng)在npm
存在,需要修改版本號(hào)
迭代
后續(xù)內(nèi)容如果有變動(dòng),每次重新發(fā)布的時(shí)候,都需要手動(dòng)的更改package.json/version
的版本號(hào),然后在執(zhí)行發(fā)布的命令
安裝
npm install node-fs-copy
在node代碼中,本地拷貝測(cè)試
const { fsCopy } = require('node-fs-copy') // 把內(nèi)容從本地D盤的test/test目錄,拷貝到test/test1目錄 fsCopy('d:/test/test', 'd:/test/test1')
服務(wù)器代碼拷貝
本地是沒有辦法直接拷貝服務(wù)器代碼的,如果需要拷貝服務(wù)器代碼,需要滿足一個(gè)條件
node服務(wù)端代碼,與需要拷貝的文件在一個(gè)服務(wù)器上
比如作者的的服務(wù)器上的文件地址為/data/code-generator
,node服務(wù)也部署在同一服務(wù)器的另一個(gè)目錄內(nèi)
//在服務(wù)器上運(yùn)行,表示把服務(wù)器的/data/code-generator文件內(nèi)的內(nèi)容,拷貝到當(dāng)前項(xiàng)目的./temporary/test內(nèi) fsCopy('/data/code-generator', './temporary/test')
完成拷貝后,可以使用打包插件把該內(nèi)容壓縮成zip包
,輸出到前端,然后刪除該臨時(shí)文件./temporary/test
,再刪除zip包
npm init --yes(初始化配置) npm i (會(huì)根據(jù)package.json里面的鍵dependencies,devDependencies來安裝相對(duì)應(yīng)的包) npm i 包(默認(rèn)安裝一個(gè)最新的包,這個(gè)包在node_modules文件夾里面,并且會(huì)更新在你的package.json文件) npm i 包@3.0.0(安裝一個(gè)指定版本的包,會(huì)更新在你的package.json文件) npm i 包 --save-dev(安裝一個(gè)開發(fā)環(huán)境所需要的包,會(huì)更新在你的package.json文件) npm uninstall 包(卸載一個(gè)包,會(huì)更新在你的package.json文件) npm update 包(更新此包版本為最新版本,會(huì)更新在你的package.json文件) npm run 腳本鍵(會(huì)根據(jù)package.json里面的"scripts"里面的腳本鍵自動(dòng)執(zhí)行相對(duì)于的值) npm publish (根據(jù)package.json的name發(fā)布一個(gè)包) npm unpublish 包名 --force(卸載npm網(wǎng)站上自己上傳的包)
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“node文件如何寫成npm包并發(fā)布出去”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!