Name
必須字段。
提示:
- 不要在name中包含js, node字樣;
- 這個名字不能以點號或下划線開頭;
- 這個名字不能包含有大寫字母;
- 這個名字可能在require()方法中被調用,所以應該盡可能短;
-
name字段不能含有非URL安全的字符,因為它將當發布的時候,它將作為你的包的相關信息被寫入URL中那么,有哪些算是非URL安全的字符呢?
Version
必須字段。
npm有自己的檢驗version的模塊——node-semver
const semver = require('semver') semver.valid('1.2.3') // '1.2.3' semver.valid('a.b.c') // null
Description
可選字段,必須是字符串。npm search的時候會用到。
Keywords
可選字段,字符串數組。npm search的時候會用到。
簡單地說,Description和Keywords是npm搜索系統中的搜索條件,所以。如果你試圖發布的是一個開源插件,那么這兩個字段你應該重視
Homepage
可選字段,沒有http://等帶協議前綴的URL。
Bugs
可選字段,問題追蹤系統的URL或郵箱地址;npm bugs用的上。
{ "url" :"http://github.com/owner/project/issues",
"email" :"project@hostname.com"
}
License
可選字段。
如果是使用一個普遍的license,比如BSD-3-Clause或MIT,直接使用:
{ "license" : "BSD-3-Clause" }
Author, contributors
都是可選字段。author是一個人,contributors是一組人。
Author的格式如下:
{ "name" : "Barney Rubble",
"email" : "b@rubble.com",
"url" : "http://barnyrubble.tumblr.com/"
}
這種格式也可以:
"Barney Rubble <b@rubble.com> (http://barnyrubble.tumblr.com/)"
Files
可選字段,項目包含的一組文件。如果是文件夾,文件夾下的文件也會被包含。如果需要把某些文件不包含在項目中,添加一個”.npmignore”文件。這個文件和”gitignore”類似。
Main
可選字段。這個字段的值是你程序主入口模塊的ID。
Bin
可選字段。很多的包都會有執行文件需要安裝到PATH中去。
這個字段對應的是一個Map,每個元素對應一個{ 命令名:文件名 }。
{ "bin" : { "npm" : "./cli.js" } }
Directories
用於指示包的目錄結構:
Directories.lib
指示庫文件的位置。
Directories.bin
和前面的bin是一樣的,但如果前面已經有bin,那么這個就無效。
除了以上兩個,還有Directories.doc& Directories.man & Directories.example。
Repository
可選字段。用於指示代碼存放的位置。
"repository" :
{ "type" : "git"
, "url" : "http://github.com/npm/npm.git"
}
"repository" :
{ "type" : "svn"
, "url" : "http://v8.googlecode.com/svn/trunk/"
}
Scripts
寫進scripts的命令(command),可以通過npm run <command>或者npm <command> 運行對應的shell指令,例如:
{
"scripts": { "start": "node main.js"}
}
可以讓你在終端輸入npm start的時候,等同於運行了node main.js
什么時候要加“run”,什么時候可以不用加“run”呢?
"scripts": { "build": "XXX.js" }
的時候,你運行XXX.js就只能通過npm run build去運行了
npm為script字段中的腳本路徑都加上了node_moudles/.bin前綴

就多了一個叫做webpack的腳本

"scripts": {"start": "webpack"}
"scripts": {"start": "node_modules/.bin webpack"}
npm start是有默認值的,默認為:node server.js
· "scripts":{"start": "node server.js"}
如果你的包里有server.js文件,npm默認將執行: node server.js
.
· "scripts":{"preinstall":"node-gyp rebuild"}
如果包里有binding.gyp,
npm默認在preinstall命令時,使用node-gyp做編譯。
better-npm-run的安裝與betterScript字段的使用
"scripts": { "test": "NODE_ENV=production karma start" }
"scripts": { "test": "better-npm-run test" }, "betterScripts": { "test": { "command": "karma start", "env": { "NODE_ENV": "test" } } }
if (process.env.NODE_ENV === 'development') { // 省略諸多內容 app.use(require('webpack-hot-middleware')(compiler, { path: '/__webpack_hmr' })) }
Config
可選字段,object。
Config對象中的值在Scripts的整個周期中皆可用,專門用於給Scripts提供配置參數。
Dependencies
可選字段,指示當前包所依賴的其他包。
{ "dependencies" :
{ "foo" : "1.0.0 - 2.9999.9999"
, "bar" : ">=1.0.2 <2.1.2"
, "baz" : ">1.0.2 <=2.3.4"
, "boo" : "2.0.1"
, "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
, "asd" : "http://asdf.com/asdf.tar.gz"
, "til" : "~1.2"
, "elf" : "~1.2.3"
, "two" : "2.x"
, "thr" : "3.3.x"
}
}
版本格式可以是下面任一種:
version
完全匹配>version
大於這個版本>=version
大於或等於這個版本<version
<=version
~version
非常接近這個版本^version
與當前版本兼容1.2.x
X代表任意數字,因此1.2.1, 1.2.3等都可以http://...
Unix系統下使用的tarball的URL。*
任何版本都可以""
任何版本都可以version1 - version2
等價於>=version1 <=version2
.range1 || range2
滿足任意一個即可git...
Git地址user/repo
devDependencies
可選字段。如果只需要下載使用某些模塊,而不下載這些模塊的測試和文檔框架,放在這個下面比較不錯。
dependencies字段和devDependencies字段的區別
怎么區分到底安裝包的時候放在dependencies中還是devDepencies中呢?
peerDependencies
可選字段。兼容性依賴。如果你的包是插件,適合這種方式。
bundledDependencies
可選字段。發布包時同時打包的其他依賴。
optionalDependencies
可選字段。如果你想在某些依賴即使沒有找到,或則安裝失敗的情況下,npm都繼續執行。那么這些依賴適合放在這里。
Engines
可選字段。既可以指定node版本:
{ "engines" : {"node" : ">=0.10.3 <0.12" } }
也可以指定npm版本:
{ "engines" : {"npm" : "~1.0.20" } }
engineStrick
可選字段,布爾值。如果你肯定你的程序只能在制定的engine上運行,設置為true。
Os
可選字段。指定模塊可以在什么操作系統上運行:
"os" : [ "darwin","linux" ]
"os" : [ "!win32" ]
CPU
可選字段。指定CPU型號。
"cpu" : [ "x64","ia32" ]
"cpu" : [ "!arm","!mips" ]
preferGlobal
可選字段,布爾值。如果你的包是個命令行應用程序,需要全局安裝,就可以設為true。
Private
可選字段,布爾值。如果private為true,npm會拒絕發布。這可以防止私有repositories不小心被發布出去。
publishConfig
可選字段。發布時使用的配置值放這。