標籤:top bsd 可讀性 class 爬蟲 pack 開始 eve 常見
前言:夜深了,我熬了一鍋熱氣騰騰的package.json,給大家端上來,希望大家喜歡
json和JS對象的區別package.json,顧名思義,它是一個json檔案,而不能寫入JS對象。所以我們首先要搞懂的是JSON和JS對象的區別:(圖源:找到的都是被爬蟲爬的文章,實在找不到原作者。。) 【注意】 在JSON中屬性名稱一定要加上雙引號name欄位name欄位的限制1.name欄位必須小於214字元(這個沒什麼好記的~)2.name欄位不能包含有“.”符號和底線(
這個要記一下哦~)3.name欄位不能包含有大寫字母(
這個要記一下哦~)4.name欄位不能含有非URL安全的字元,因為它將當發布的時候,它將作為你的包的相關資訊被寫入URL中那麼,有哪些算是非URL安全的字元呢?咱們看錶說話:(圖源:《URL中的保留和Unsafe 字元》——tianya23) 【注意】:1.我唯一覺得需要特別注意的是,name欄位不能含有大寫字母和底線,因為對寫JS的人來說,因為駝峰命名法的習慣往往試圖加個大寫字母進去;而對於寫node的人來說,又可能忍不住想在單詞與單詞間連個底線,這都是錯誤的來源,要謹記。 2.package.json的name欄位似乎格外地喜歡“-”這個符號呢,所以我們在寫name欄位時可以用它做串連符號哦,例如:像“react-router”這個欄位一樣 version欄位npm對version定義的規則要求對於"version":"x.y.z"1.修複bug,小改動,增加z2.增加了新特性,但仍能向後相容,增加y3.有很大的改動,無法向後相容,增加x 例如:我原本的項目是1.0.0版本的話若是1中情況,變為1.0.1若是2中情況,變為1.1.0若是3中情況,變為2.0.0 npm有自己的檢驗version的模組——node-semver npm有自己的一套檢驗version正確性的模組,它叫做 node-semver,是一開始就跟隨著npm一起被打包安裝的。當然了,你也可以通過自己安裝去在自己的項目中使用它。使用的例子像這樣:先npm install --save semver然後:
const semver = require(‘semver‘)semver.valid(‘1.2.3‘) // ‘1.2.3‘semver.valid(‘a.b.c‘) // null
【吐槽】:怎麼感覺好像沒什麼大用哪,不過官方文檔上這樣寫我也只好這樣翻譯過來了。詳細資料左轉: https://github.com/npm/node-semver name欄位和version欄位可以說是package.json最重要也是最基本的兩個欄位了。它們共同構成了你的包的唯一標識 keywords和description欄位欄位要求:description:字串keywords:字串數組 簡單地說,這兩個東東是npm搜尋系統中的搜尋條件,所以。如果你試圖發布的是一個開源外掛程式,那麼這兩個欄位你應該重視 license欄位這是你指定的項目的許可證,它告訴他人他們是否有權利使用你的包,以及,在使用你的包的時候他們應該受到怎樣的限制咱們還是上一張圖吧:
圖源:《如何選擇開源許可證?》——阮一峰 欄位要求:單個license:直接寫入名稱
{ "license" : "BSD-3-Clause" }多個license:在一對圓括弧內寫入license名稱,且在多個license內用AND等串連
{ "license" : "(ISC AND GPL-3.0)" }更多license欄位的文法規則請右轉: SPDX license運算式的文法規則 2.0版本 https://www.npmjs.com/package/spdx author欄位要求:一個字串或是一個對象。如果是一個對象,該對象包含三個屬性:name屬性(必填)email屬性(選填)URL屬性(選填)
{ "name" : "Barney Rubble", "email" : "[email protected]", "url" : "http://barnyrubble.tumblr.com/"}
main欄位這個是你項目的入口檔案。簡而言之,當
別人安裝了你發布的模組時,require你的模組的時候取得的就是你main欄位規定的入口檔案的輸出。
例如你寫入了 { "main":"XXX.js"},而他人通過npm install ‘你的模組名稱‘ . 安裝了你的模組後,他通過 var X = require(‘你的模組名稱‘)取得的就是你在XXX.js的輸出 script欄位寫進scripts的命令(command),可以通過npm run <command>或者npm <command> 運行對應的shell指令,例如:{"scripts": { "start": "node main.js"} } 可以讓你在終端輸入npm start的時候,等同於運行了node main.js 什麼時候要加“run”,什麼時候可以不用加“run”呢? 一個讓我們可能有些困擾的問題是,通過script欄位內的npm命令運行指令碼時,有時候要加“run”,有時候又不要加"run",即有時候是可以直接用npm <command>;而有時候又要用npm run <command> 才能運行指令碼,這該如何區分呢? 首先要提一下的是,run的原名是run-script,是一段指令碼,而run是它的一個別名(alias) 1.當run[-script]被 test, start, restart, and stop這四個內建的命令所使用時,它可以被省略(或者說不需要加“run”就可以直接調用),所以我們
平時最常輸入的npm install實際上相當於npm run install,只不過是為了方便省略了run而已 原文:run[-script] is used by the test, start, restart, and stop commands, but can be called directly 2.
當你在package.json的script欄位中定義的是除了1中的4個命令外的命令的時候,你就不能省略“run”了例如你定義
"scripts": { "build": "XXX.js"}
的時候,你運行XXX.js就只能通過npm run build去運行了
npm為script欄位中的指令碼路徑都加上了node_moudles/.bin首碼 npm為script欄位中的指令碼路徑都加上了node_moudles/.bin首碼,這意味著:你在試圖運行本地安裝的依賴在 node_modules/.bin 中的指令碼的時候,可以省略node_modules/.bin這個首碼。例如:我剛npm install webpack了,而在我的項目下的node_modules目錄的.bin子目錄下:
就多了一個叫做webpack的指令碼
本來運行這個指令碼的命令應該是:node_modules/.bin webpack但由於npm已經自動幫我們加了node_modules/.bin首碼了,所以我們可以直接寫成:
"scripts": {"start": "webpack"}而不用寫成:
"scripts": {"start": "node_modules/.bin webpack"} 原文:npm run adds node_modules/.bin to the PATH provided to scripts. Any binaries provided by locally-installed dependencies can be used without the node_modules/.bin prefix npm start是有預設值的,預設為:node server.js better-npm-run的安裝與betterScript欄位的使用 這個是package.json文檔介紹裡所沒有的,但這裡我想特別講一下: 先通過npm install better-npm-run安裝好包,然後你就可以在你的package.json裡面使用一個新的欄位—— "betterScripts"欄位 故名思意,它和"scripts"欄位很像,那麼兩者間有什麼聯絡呢?咱還是用代碼說話吧,它可以把
"scripts": { "test": "NODE_ENV=production karma start"}變成:
"scripts": { "test": "better-npm-run test"},"betterScripts": { "test": { "command": "karma start", "env": { "NODE_ENV": "test" } }} 簡單地說,就是當運行"scripts"欄位中的命令的時候,它會進一步去運行 "betterScripts"中對應的命令,並通過"env"對象控制運行時的環境變數,如NODE_ENV。
好處是讓你的代碼的可讀性更強一些 另外提一下NODE_ENV的作用:
用來設定環境變數(預設值為development)。
通過檢查這個值可以分別對開發環境和生產環境下做不同的處理 例如在服務端代碼中通過檢查是否是開發環境(development)決定是否啟動代碼熱重載功能(
熱重載只是為了在開發環境【developmen】提高生產效率用,在生產環境【production】沒毛用)
if (process.env.NODE_ENV === ‘development‘) {// 省略諸多內容app.use(require(‘webpack-hot-middleware‘)(compiler, { path: ‘/__webpack_hmr‘}))} dependencies欄位和devDependencies欄位 dependencies欄位和devDependencies欄位分別代表生產環境依賴和開發環境依賴 與兩個欄位相關的npm install的命令npm install 模組 --save 安裝好後寫入package.json的dependencies中(生產環境依賴)npm install 模組 --save-dev 安裝好後寫入package.json的devDepencies中(開發環境依賴) 怎麼區分到底安裝包的時候放在dependencies中還是devDepencies中呢?很簡單1.一般你去github或者npm社區裡面相關包的介紹後面都會帶有--save 或者--save-dev 的參數的,這時候把命令直接複製過來運行就OK了,不用管那麼多 2.
如果沒有1中的介紹,那麼請思考,這個包到底是純粹為了開發方便使用呢?還是要放到上線後APP的代碼中呢?前者則為devDepencies,後者則為dependencies 【注意】:在團隊協作中,一個常見的情景是他人從github上clone你的項目,然後通過npm install安裝必要的依賴,(剛從github上clone下來是沒有node_modules的,需要安裝)那麼根據什麼資訊安裝依賴呢?就是你的package.json中的dependencies和devDepencies。所以,在本地安裝的同時,
將依賴包的資訊(要求的名稱和版本)寫入package.json中是很重要的!
參考資料:npm官方文檔packagejson配置篇 https://docs.npmjs.com/files/package.json
夥計,給我來一杯package.json!不加糖