新手開發自己的npm包
怎麼開發一個npm包
一、註冊npm賬號
- 怎麼將程式碼提到github,大家都知道需要一個github賬號
- 同樣,開發一個npm包,當然也需要一個npm賬號,將npm包釋出到npm的託管伺服器
- 該例項包含了模組的區域性呼叫和全域性呼叫兩種方式
二、開發npm包
1.目錄構建
- npm init
- 專案結構:npm包實際是一個存檔檔案,即一個目錄直接打包為.zip或tar.gz格式的檔案,安裝後解壓還原為目錄。完全符合CommonJS規範的包目錄應該包含如下這些檔案。
.
├── bin //命令配置
├── README.md //說明文件
├── index.js //主入口
├── src //功能檔案
├── package.json //包資訊
└── test //測試用例
生產package.json檔案,裡面要注意引數,repository:”“一定要填寫倉庫地址,因為最後npmjs,會從線上倉庫獲取。
證明是否登入成功:
npm who am i
2.開發模組
- 入口index.js模組
非全域性安裝(npm install xxx),則多有的函式介面都通過index.js暴露給外部呼叫
/**
* Hello World
* @function hello
**/
const hello = function(key){
console.log('Hello World!');
};
exports.hello = hello;
- init.js模組
const exec = require('child_process').exec;
exports.run = function(name) {
//初始化一個空資料夾
exec('mkdir ' + name,function() {
console.log('king init命令已執行...');
});
};
- start.js模組
const express = require('express');
const app = express();
exports.run = function(options) {
const port = options.port || 3000;
app.listen(port);
console.log('服務已啟動,正在監聽' + port + '埠...');
};
3.配置全域性命令
bin目錄下寫配置程式碼
- cli.js自定義命令,主要通過引入commander模組去處理,包括命令描述、引數及執行動作
- king.js檔名稱應與全域性命令king保持一致,做命令的入口,具體看demo
三、釋出npm包
1.npm login
npm login //沒有註冊賬號的,npm adduser
2.npm publish
npm publish .
如果你以後修改了程式碼,然後想要同步到 npm 上的話請修改 package.json 中的 version 然後再次 publish,更新的版本上傳的版本要大於上次
1.使用 cnpm 的注意報錯:
no_perms Private mode enable, only admin can publish this module
設定回原本的就可以了:
npm config set registry http://registry.npmjs.org
2.npm包package.json中registory屬性一定要填寫,每次publish npm時package.json中version版本一定要大於上一次。
3.npm publish failed put 500 unexpected status code 401
這樣的報錯資訊,往往是沒有登入成功,操作npm login
管理包許可權:
通常,一個包只有一個擁有許可權進行釋出。如果需要多人進行釋出,可以使用npm owner 命令幫助你管理包的所有者:
npm owner ls eventproxy
使用這個命令,也可以新增包的擁有者,刪除一個包的擁有者:
npm owner ls <package name>
npm owner add <user> <package name>
npm owner rm <user> <package name>
四、全域性安裝和區域性安裝
1.區域性安裝
- 所有的函式功能介面都由index.js暴露給外部
- src裡面可以放功能程式碼,src –> index.js只做output,暴露給外部呼叫
2.全域性安裝
- 包全域性安裝的情況,一般是做自動化工具,關鍵在於配置全域性命令,與index.js無關
- 通過bin目錄下與全域性命令相同的js檔案(如king.js)處理command的輸入【如:king start】
- 來,讓我們看看執行king –help的效果
五、常見問題
1. npm publish出錯
npm ERR! publish Failed PUT 403
npm ERR! Darwin 16.0.0
npm ERR! argv "/usr/local/Cellar/node/5.6.0/bin/node" "/usr/local/bin/npm" "publish"
npm ERR! node v5.6.0
npm ERR! npm v3.10.3
npm ERR! code E403
npm ERR! "You cannot publish over the previously published version 0.0.43." : npm-develop
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR! <https://github.com/npm/npm/issues>
npm ERR! Please include the following file with any support request:
npm ERR! /Volumes/work/private/github/npm-develop/npm-debug.log
沒有更新package.json的版本號,每次的版本號必須大於上次,否則無法publish
2. 採用sudo npm publish
password應該輸入的是本機開機密碼,非npm賬號密碼
3. 全域性命令無效
package.json中的bin命令配置,屬性值應該和指令碼名稱一致
"bin": {
"king": "./bin/king.js"
}
- 釋出包過程可能會遇到很多問題,我印象比較深刻的是npm ERR publish 403
You do not have permission to publish ‘somepackage’.Are you logged in as
the corrent user?:somepackage
意思是我沒許可權釋出somepackage,並問我是否使用了正確的賬號,
那也許是somepackage被別人釋出過了吧,所以我修改了package.json檔案
把name改成somepackage_xiaoguoping.
6.驗證
這裡先使用npm install 你釋出出去的包的名字,然後看看命令列裡面是不是把你的包下載了下來。如果下載成功,就說明你的包已經成功地釋出在npm上了。
或者你親自上npm這個網站(該帶梯子的請自帶梯子),然後在搜尋框裡面輸入你剛才寫下來的關鍵字。。。不過,如果你的包的星星(點贊)數量不夠的話應該會排到很尾。。。所以我建議你用包名直接搜(反正我用關鍵字找找不到我的包。。。):
在你執行完npm init這個步驟之後,你把程式碼扔進這個包裡面後,就形成了一個本地的包,可以直接把這個包扔到專案裡面node_module這個資料夾裡面的,然後在你的專案裡面就可以直接:
var a=require('你的包名');
直接使用包名引入,不用檔案路徑了,就像引入fs或者http模組一樣
測試完確定沒有什麼bug之後再執行npm publish哦
相關推薦
新手開發自己的npm包
怎麼開發一個npm包 一、註冊npm賬號 怎麼將程式碼提到github,大家都知道需要一個github賬號 同樣,開發一個npm包,當然也需要一個npm賬號,將npm包釋出到npm的託管伺服器 該例項包含了模組的區域性呼叫和全域性呼叫兩種方式 二
如何開發一個npm包併發布
一、安裝nodejs 不多說了,網上教程多得是 二、建立自己的npm包 目錄結構 npm-test a.js b.js package.json 開發 為了簡單便於理解,就開發一個簡單地hello程式 a.js functi
開發自己的composer包
bili .net cnblogs cti 指定 穩定 span ins welcom 1. 創建一個開發目錄 1 mkdir project 2 cd project 2. 利用composer生成一個composer.json 1 composer init
創建自己的私有npm包並發布
images 成功 有一個 blog 兩個文件 輸出 strong 目錄 兩個 本文參考網上一些零散資料整理,比較系統的入門npm包的發布,幹貨在此: 1、下載node 地址:http://nodejs.cn/download/ 安裝完畢之後可打開cmd命令行測試是否安裝成
開發npm包
node style ice image cti test author class 存在 1、創建項目,使用npm init name:填寫你這個包的名字,默認是你這個文件夾的名字。 註:最好先去npm上找一下有沒有同名的包。也可以在命令行裏面輸入npm i
npm install (讓別人下載自己的包)
世界 引用 node mon sta color .json 上傳 接下來 好幾天沒更新了,再這裏跟大家說聲抱歉,今天來點幹貨。 發布一個包在npm上,可以供世界所有人使用,想一下,以前我們做項目,都是在npm install 別人的包,什麽時候才能install我們自己
如何開發NPM包
新建 specified 進入 version 簡單 script text .com strong 創建包目錄 D:\>mkdir mypackage && cd mypackage D:\mypackage>npm init --ye
在2018年如何優雅的開發一個typescript語言的npm包?
order pts 文件夾 pub epub save rip ring 回復 歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~ 本文由小明plus發表 很多時候,我們可能想要用 typescript 語言來創建一些模塊,並提交到 npm 供別人使用, 那麽在
在npm上發布一個自己的包
過程 指定 出現 重要 publish reg str 新項目 問題 準備工作 首先,要在https://www.npmjs.com網站註冊一個賬號,具體過程就不說了,很簡單。然後最重要的就是要準備好自己要發布的項目包。 發布 如果是一個新項目,就要先初始化一下 $ np
npm包開發問題記錄
建立自己的npm包 首先要有一個npm 的賬號,提前在npm官網上註冊好。 npm包實際上是一個存檔檔案,即一個目錄直接打包為.zip或者tar.gz 格式的檔案,安裝後解壓還原為目錄。 新增賬號 p
Nodejs 釋出自己的npm包並製作成命令列工具
近日當我在使用npm上已經存在的一個包時,發現它有bug;於是決定自己實現這個功能,自己寫一個npm包。 下面我記錄一下自己的實現過程。 1. npm init 選擇一個資料夾,然後用命令列cd進去,然後執行npm init,這時會生成一長串表單,根據自己的實際情況填寫內容
學習開發自己的 Composer 包,並使用 GitHub 實時更新到 Packagist
composer是什麼 Composer 不是一個包管理器。是的,它涉及 "packages" 和 "libraries",但它在每個專案的基礎上進行管理,在你專案的某個目錄中(例如 vendor)進行安裝。預設情況下它不會在全域性安裝任何東西。因此,這僅僅是一個依賴管理。
使用typescript開發angular模組(釋出npm包)
建立模組 初始化package.json檔案 執行命名 npm init -y 會自動生成package.json檔案如下,name預設為資料夾名稱 { "name": "MZC-Ng-Api", "version": "1.0.0
細述怎麼開發自己的外掛依賴,併發布到npm上
寫在文章前:一個在專案開發中通常遇到的需求,後臺返回一個時間戳,前臺需要處理成 xxxx年xx月xx日等格式的時間格式。通常我們會封裝成一個函式進行呼叫,但在本文中,就小題大作一下,一個這樣的需求怎麼寫成一個外掛依賴呢?a. this.timeformater('152809
如何使用npm釋出自己的npm包
記錄一次npm包釋出的過程: 如果想要在npm上有自己的依賴包,那麼首先你要先有一個npm的賬號,沒有的話就需要npm官網 去註冊一個; 然後需要用npm命令去新建一個專案: //1.進入一個資料夾,開啟cmd,輸入命令: npm init 之後就
開發外掛上傳npm 包上面
看了網上講的教程自己沒有安裝成功。。。 最後慢慢搞好了。。下面是我成功上傳到npm上的步驟 one 建立賬號 npm adduser 建立一個賬號 會叫你填入使用者名稱 密碼 郵箱號 然後 登陸 two npm login 登陸 last
修改巨人的npm包 & 如何用npm上傳、更新自己的包
其實剛剛從傳統前端+後端轉到現在主流的node,前後端分離,vue三個月不到的我,其實還沒有想過自己會寫包上傳到npm給大家使用……契機來源於,我下載了一個別人寫好的基於vue實現的tree grid包,但是我需要修改一些樣式,但是下載下來的在node_mod
npm包開發(whale-makelink)
改變 error: 工具 ima 登錄 targe get type con whale-makelink是一個npm工具,是強業務的工具,可以將當前工程目錄下的工程文件夾,在README中生成工程的鏈接地址。Demo。 一、npm init 使用npm init
開發自己的類庫
對象 ret sha his sda .get ets str 決定 上文說過,復用性主要有:插件,插件為功能的基本單元;組件,組件為應用的單元;設計模式,設計模式為解決為題的思路。 上述三者是算法的具體表現形式。 基於上面的認識,減少重復造輪子的時間,實現高效開發,決定開
如何開發自己的搜索帝國之安裝ik分詞器
style utf-8 編碼 ref 文本 需要 shell pack 用戶 you Elasticsearch默認提供的分詞器,會把每個漢字分開,而不是我們想要的根據關鍵詞來分詞,我是中國人 不能簡單的分成一個個字,我們更希望 “中國人”,&