nodejs工具應(yīng)用

1恩急、如何全局安裝一個(gè) node 應(yīng)用?

npm install -g appName

2盛垦、package.json 有什么作用棕诵?

  • 相當(dāng)于你本地項(xiàng)目的一個(gè)文檔說(shuō)明裁良。

  • 允許你指定你項(xiàng)目中所使用的node包的版本。

  • 構(gòu)建你的項(xiàng)目更加容易校套,便于給其他人共享价脾。

一個(gè)典型的package.json文件如下所示。

{

  "name": "my_package", 
  //你的項(xiàng)目名稱(chēng)笛匙,全部小寫(xiě)侨把,不能有空格犀变,一個(gè)單詞,允許-和_. 如果是要發(fā)布自己的node插件座硕,一般用github上面項(xiàng)目名稱(chēng)弛作。 下次有機(jī)會(huì)說(shuō)明 npm 上面的發(fā)布流程涕蜂。

  "version": "1.0.0",
  //你的項(xiàng)目版本號(hào)华匾,最好遵守 GNU 版本號(hào)管理。 

  "main": "index.js",
  //目錄中啟動(dòng)文件名稱(chēng)机隙≈├或者稱(chēng)之為入口文件,一般都是 index.js

  "scripts": {
  //使用 scripts 字段定義腳本命令
        "test": "echo \"Error: no test specified\" && exit 1" 

    },

  "keywords": [],
  //項(xiàng)目的關(guān)鍵詞有鹿。 一般用不到旭旭,發(fā)布npm才用得到。
  
    "author": "ag_dubs", //作者名稱(chēng)

    "license": "ISC", //協(xié)議 

    "repository": {  
  // 用來(lái)存放到 版本管理遠(yuǎn)程服務(wù)葱跋。 發(fā)布npm才有用

        "type": "git",

        "url": "https://github.com/ashleygwilliams/my_package.git"

    },

    "dependencies": { 
  // 正式使用時(shí)持寄,依賴(lài)的包

        "my_dep": "^1.0.0"

    },

    "devDependencies" : {
  //開(kāi)發(fā)或者測(cè)試時(shí),依賴(lài)的包娱俺。

        "my_test_framework": "^3.1.0"

    }

    "bugs": { 
   //同repository

        "url": "https://github.com/ashleygwilliams/my_package/issues"

    },

  "homepage": "https://github.com/ashleygwilliams/my_package"
  //項(xiàng)目主頁(yè)稍味、 發(fā)布才有用

}

一般不會(huì)吧node_modules上傳到git或者npm上面,需要package來(lái)管理自己打包所需的插件荠卷,以便于項(xiàng)目中其他人員共享模庐,這個(gè)文件的好處就是一個(gè)人添加某個(gè)插件后,更改了這個(gè)文件油宜,其他人員只需要同步此文件掂碱,然后執(zhí)行如下命令,即可安裝同樣的包慎冤。

npm install

3疼燥、npm install --save app 與 npm install --save-dev app有什么區(qū)別?

  • 都是為了省區(qū)修改 package文件

  • --save將依賴(lài)添加到字段dependencies中,是產(chǎn)品依賴(lài)模塊蚁堤。

npm install  --save  moduleName
  • --save-dev將依賴(lài)添加到字段devDependencies中悴了,是開(kāi)發(fā)依賴(lài)模塊。(可簡(jiǎn)寫(xiě)為-d)
npm install  -d moduleName

4违寿、node_modules的查找路徑是怎樣的?

當(dāng)require('xxx'),這個(gè)模塊的xxx不是nodejs的內(nèi)建模塊(比如http湃交、path、fs等)藤巢,并且模塊標(biāo)識(shí)不以路徑開(kāi)始('../ , ./')搞莺。
則nodejs會(huì)不斷的上一級(jí)目錄遞歸查找node_modules目錄,若一直未找到模塊的xxx掂咒,則會(huì)拋錯(cuò)才沧。

5迈喉、 npm3與 npm2相比有什么改進(jìn)?yarn和 npm 相比有什么優(yōu)勢(shì)? (選做題目)

  • npm3相比npm2主要改進(jìn)了依賴(lài)管理方案
  • npm2安裝依賴(lài)的時(shí)候比較簡(jiǎn)單直接温圆,直接按照包的依賴(lài)的樹(shù)形結(jié)構(gòu)下載填充至本地目錄挨摸,缺陷在于太深的目錄樹(shù)結(jié)構(gòu)會(huì)嚴(yán)重影響效率,甚至在window下可能會(huì)超出系統(tǒng)路徑限制的長(zhǎng)度岁歉,另外有刪node_modules目錄都可能經(jīng)歷漫長(zhǎng)的等待得运。
  • 針對(duì) npm2 的問(wèn)題,npm3 加了點(diǎn)算法锅移,直白的解釋就是:npm install
    時(shí)會(huì)按照 package.json 里依賴(lài)的順序依次解析熔掺,遇到新的包就把它放在第一級(jí)目錄,后面如果遇到一級(jí)目錄已經(jīng)存在的包非剃,會(huì)先判斷版本置逻,如果版本一樣則忽略,否則會(huì)按照 npm2 的方式依次掛在依賴(lài)包目錄下备绽。
  • 在包版本差異化不太嚴(yán)重的情況下券坞,這種構(gòu)建方式會(huì)幾乎把所有包放在一級(jí)目錄下,很大程度下提升了效率以及節(jié)省了部分磁盤(pán)空間肺素。
  • 但是npm3又遇到了新問(wèn)題恨锚,有可能開(kāi)發(fā)環(huán)境和測(cè)試環(huán)境的node_modules的目錄結(jié)構(gòu)不一樣,以及其他因素压怠,faceboook開(kāi)發(fā)了yarn來(lái)替代npm眠冈。
  • yarn優(yōu)點(diǎn)在于只要通過(guò)Yarn安裝過(guò)的套件都會(huì)在本地目錄產(chǎn)生Cache,也就是說(shuō)只要安裝過(guò)依次菌瘫,下次重新安裝都會(huì)從Cache重新讀取蜗顽, 安裝速度會(huì)提升很多。

6雨让、webpack是什么雇盖?和其他同類(lèi)型工具比有什么優(yōu)勢(shì)?

webpack是一種模塊加載器兼打包工具栖忠,可以將各種資源崔挖;例如JS(含JSX)、coffee庵寞、樣式(含less/sass)狸相、圖片等都作為模塊來(lái)使用和處理。

  • 對(duì) CommonJS捐川、AMD脓鹃、ES6 的語(yǔ)法兼容。
  • 對(duì)CSS古沥、JS瘸右、圖片等資源文件都支持打包娇跟。
  • 串聯(lián)式的模塊加載器以及插件機(jī)制,讓其具有更好地靈活性和擴(kuò)展性太颤,**
  • 例如提供對(duì) CoffeeScript苞俘、ES6 的支持。
  • 有獨(dú)立的配置文件 webpack.config.js
  • 可以將代碼切分成不同的 chunk龄章,實(shí)現(xiàn)按需加載吃谣,降低初始化時(shí)間
  • 支持 SourceUrls 和 SourceMaps,易于調(diào)試
  • 具有強(qiáng)大的 Plugin 接口瓦堵,大多是內(nèi)部插件基协,使用起來(lái)比較靈活
  • webpack 使用異步 IO 并具有多級(jí)緩存歌亲,這使得 webpack 很快菇用。

7、npm script是什么陷揪?如何使用惋鸥?

npm script 是package.json的一個(gè)屬性,可以在scripts里面定義一些腳本命令悍缠。內(nèi)置的命令名如start卦绣、test等可直接使用run xxx執(zhí)行,自定義的命令名使用 npm run xxx 執(zhí)行飞蚓。如:

"script" : {
  "new": "mkdir test"           //新建一個(gè)test文件夾
}

執(zhí)行命令:npm run new

8滤港、 webpack 應(yīng)用

  • 使用npm scripts
{
  "name": "lebronii",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "webpack ./src/app.js app.bundle.js"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^3.6.0"
  }
}
  • 或者配置webpack.config.js
var path = require('path')

module.exports = {
  entry: './src/app.js',
  output: {
    path: path.resolve(__dirname, './bin'),
    filename: 'bundle.js'
  }
}

代碼地址:https://github.com/zh-yang/resume/tree/master/LebronII
預(yù)覽地址:https://zh-yang.github.io/resume/LebronII

9、gulp是什么趴拧?使用 gulp 實(shí)現(xiàn)圖片壓縮溅漾、CSS 壓縮合并、JS 壓縮合并

  • gulp是自動(dòng)化的前端構(gòu)建工具著榴,開(kāi)發(fā)過(guò)程中可能需要對(duì)圖片和代碼進(jìn)行壓縮合并添履,less/sass/pug代碼的轉(zhuǎn)換,代碼規(guī)范性的檢查脑又、測(cè)試等暮胧,gulp可以將這些工作整合在一起,方便高效地完成任務(wù)问麸。
  • 安裝gulp
npm install -g gulp
npm install --save-dev gulp
  • gulp常見(jiàn)用法
var gulp = require('gulp');
var cssnano = require('gulp-cssnano');
var uglify = require('gulp-uglify');
var imgmin = require('gulp-imagemin');
var concat  = require('gulp-concat');
//當(dāng)我們需要使用一個(gè)功能時(shí)往衷,需要先在bash安裝這個(gè)模塊,
//然后在使用前require它严卖,最后在gulp.task中定義這個(gè)功能席舍。

//圖片壓縮
gulp.task('imagemin',function(){
  return gulp.src('圖片地址')
  .pipe(imagemin())
  .pipe(gulp.dest('輸出目錄')
})


//css壓縮合并
gulp.task('cssnano',function(){
  return gulp.src([css1地址,css2地址...])
  .pipe(cssnano())       //壓縮
  .pipie(concat(新文件名))  //合并
  .pipe(gulp.dest(輸出目錄))
})


//js壓縮合并
gulp.task('uglify',function(){
  return gulp.src([js1地址,js2地址,....])
  .pipe(uglify())      //壓縮
  .pipie(concat(新文件名))   //合并
  .pipe(gulp.dest(輸出目錄))
})
  • gulp其他用法
var gulp = require('gulp')

//添加版本號(hào)
 var rev = require('gulp-rev')

//版本號(hào)替換 
 var revReplace = require('gulp-rev-replace')

//解析html資源定位
 var useref = require('gulp-useref')

//less轉(zhuǎn)css(css預(yù)編譯)
var less = require('gulp-less')

//css后編譯(前綴等、兼容)
 var autoprefixer = require('gulp-autoprefixer')

//css壓縮
var cssnano = require('gulp-cssnano')
//或 var minifycss = require('gulp-minify-cdd')
//或 var csso = require('gulp-csso')

//js壓縮
//或 var gulpif = require('gulp-if')
//或 var filter = require('gulp-filter')
var uglify = require('gulp-uglify')

//合并文件
var concat = require('gulp-concat')

//重命名
var rename = require('gulp-rename')

//清空文件夾
var clean = require('gulp-clean')

//html壓縮
var minhtml = require('gulp-htmlmin')

//js代碼規(guī)范性檢查
var jshint = require('gulp-jshint')

//圖片壓縮
var imagemin = require('gulp-imagemin')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末妄田,一起剝皮案震驚了整個(gè)濱河市俺亮,隨后出現(xiàn)的幾起案子驮捍,更是在濱河造成了極大的恐慌,老刑警劉巖脚曾,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件东且,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡本讥,警方通過(guò)查閱死者的電腦和手機(jī)珊泳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拷沸,“玉大人色查,你說(shuō)我怎么就攤上這事∽采郑” “怎么了秧了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)序无。 經(jīng)常有香客問(wèn)我验毡,道長(zhǎng),這世上最難降的妖魔是什么帝嗡? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任晶通,我火速辦了婚禮,結(jié)果婚禮上哟玷,老公的妹妹穿的比我還像新娘狮辽。我一直安慰自己,他們只是感情好巢寡,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布喉脖。 她就那樣靜靜地躺著,像睡著了一般讼渊。 火紅的嫁衣襯著肌膚如雪动看。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天爪幻,我揣著相機(jī)與錄音菱皆,去河邊找鬼。 笑死挨稿,一個(gè)胖子當(dāng)著我的面吹牛仇轻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奶甘,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼篷店,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起疲陕,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤方淤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蹄殃,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體携茂,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年诅岩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了讳苦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吩谦,死狀恐怖鸳谜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情式廷,我是刑警寧澤咐扭,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站懒棉,受9級(jí)特大地震影響草描,放射性物質(zhì)發(fā)生泄漏览绿。R本人自食惡果不足惜策严,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望饿敲。 院中可真熱鬧妻导,春花似錦、人聲如沸怀各。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瓢对。三九已至寿酌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間硕蛹,已是汗流浹背醇疼。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留法焰,地道東北人秧荆。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像埃仪,于是被迫代替她去往敵國(guó)和親乙濒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容