npm-npmscript-gulp-webpack

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

npm是一個(gè)node包管理和分發(fā)工具,有了npm,可以很快的找到特定服務(wù)要使用的包,進(jìn)行下載冰木、安裝以及管理已經(jīng)安裝的包。

node的安裝分為全局模式和本地模式笼恰。
全局安裝命令為$npm install -g moduleName踊沸。
在全局模式下,Node包會(huì)被安裝到Node的安裝目錄下的node_modules下社证。

2: package.json 有什么作用逼龟?

作用:
1.相當(dāng)于你本地項(xiàng)目的一個(gè)文檔說(shuō)明。
2.允許你指定你項(xiàng)目中所使用的node包的版本追葡。
3.構(gòu)建你的項(xiàng)目更加容易腺律,便于給其他人共享。

一個(gè)比較完整的package.json文件

{
    "name": "Hello World",             //項(xiàng)目名稱(chēng)(必須)
    "version": "0.0.1",                 //項(xiàng)目版本(必須)
    "author": "張三",                   //項(xiàng)目作者信息
    "description": "第一個(gè)node.js程序",  //項(xiàng)目描述(必須)
        "homepage": "",                  //項(xiàng)目主頁(yè)
    "keywords":["node.js","javascript"],  //關(guān)鍵詞數(shù)組宜肉,方便在 npm search中搜索
    "repository": {                        //項(xiàng)目資源庫(kù)
        "type": "git",
        "url": "https://path/to/url"
    },
    "license":"MIT",                   //項(xiàng)目許可協(xié)議
    "engines": {"node": "0.10.x"},    //指定工作的node的版本
    "bugs":{"url":"http://path/to/bug","email":"bug@example.com"},//項(xiàng)目的提交問(wèn)題的url和(或)郵件地址
    "contributors":[{"name":"李四","email":"lisi@example.com"}],  //貢獻(xiàn)者列表
    "scripts": {
        "start": "node index.js"
    },
    "dependencies": {              //指定了項(xiàng)目運(yùn)行所依賴(lài)的模塊
        "express": "latest",
        "mongoose": "~3.8.3",
        "handlebars-runtime": "~1.0.12",
        "express3-handlebars": "~0.5.0",
        "MD5": "~1.2.0"
    },
    "devDependencies": {          //指定項(xiàng)目開(kāi)發(fā)所需要的模塊
        "bower": "~1.2.8",
        "grunt": "~0.4.1",
        "grunt-contrib-concat": "~0.3.0",
        "grunt-contrib-jshint": "~0.7.2",
        "grunt-contrib-uglify": "~0.2.7",
        "grunt-contrib-clean": "~0.5.0",
        "browserify": "2.36.1",
        "grunt-browserify": "~1.3.0",
    }
}
3: npm install --save app 與 npm install --save-dev app有什么區(qū)別?

-save-dev 是指將包信息添加到 package.json 里的 devDependencies節(jié)點(diǎn)匀钧,表示開(kāi)發(fā)時(shí)依賴(lài)的包。
-save 是指將包信息添加到 package.json 里的dependencies節(jié)點(diǎn)谬返,表示發(fā)布時(shí)依賴(lài)的包之斯。

舉個(gè)例子
gulp,gulp-less 等等編譯js或者css的包遣铝,運(yùn)行時(shí)是不需要的佑刷,所以建議安裝到 devDependencies 莉擒,
如jade,express等包项乒,運(yùn)行時(shí)會(huì)用到啰劲,所以建議安裝到 dependencies

4: node_modules的查找路徑是怎樣的?

從當(dāng)前目錄開(kāi)始逐級(jí)向上查找node_modules

5: npm3與 npm2相比有什么改進(jìn)?yarn和 npm 相比有什么優(yōu)勢(shì)?

npm3相比npm2主要改進(jìn)了依賴(lài)管理方案

npm 2.0 時(shí)代各個(gè)模塊中的公共模塊沒(méi)有做到復(fù)用檀何,都有自己的一份依賴(lài),這些模塊造成了很大的冗余廷支。這種方式的一大弊端就是導(dǎo)致 node_modules 的目錄層級(jí)非常的深频鉴,以至在 windows 下會(huì)出現(xiàn) node_modules 路徑過(guò)長(zhǎng),無(wú)法刪除

npm3版本npm install 時(shí)會(huì)按照 package.json 里依賴(lài)的順序依次解析恋拍,遇到新的包就把它放在第一級(jí)目錄垛孔,后面如果遇到一級(jí)目錄已經(jīng)存在的包,會(huì)先判斷版本施敢,如果版本一樣則忽略周荐,否則會(huì)按照 npm2 的方式依次掛在依賴(lài)包目錄下

yarn和 npm 相比的優(yōu)勢(shì)

  • 急速
    下載速度快,下載任務(wù)是并行下載僵娃,而npm是按順序一個(gè)一個(gè)下載
  • 緩存
    會(huì)緩存下載過(guò)的包概作,下載過(guò)的包甚至可以離線下載,npm不能
  • 清晰
    輸出不冗余默怨,進(jìn)度條形象
  • 安全
    下載前檢查簽名及包的完整性
  • 可靠
    各平臺(tái)依賴(lài)一致性讯榕,yarn.lock自動(dòng)更新
  • 優(yōu)化
    下載失敗自動(dòng)重新請(qǐng)求,對(duì)網(wǎng)絡(luò)資源最大化利用匙睹,避免無(wú)用請(qǐng)求
6: webpack是什么愚屁?和其他同類(lèi)型工具比有什么優(yōu)勢(shì)?

什么是Webpack

WebPack可以看做是模塊打包機(jī):它做的事情是痕檬,分析你的項(xiàng)目結(jié)構(gòu)霎槐,找到JavaScript模塊以及其它的一些瀏覽器不能直接運(yùn)行的拓展語(yǔ)言(Scss,TypeScript等)梦谜,并將其打包為合適的格式以供瀏覽器使用丘跌。支持AMD和CommonJS,以及其他的一些模塊系統(tǒng)改淑,并且兼容多種JS書(shū)寫(xiě)規(guī)范碍岔,可以處理模塊間的依賴(lài)關(guān)系。

WebPack和Grunt以及Gulp相比有什么特性

Grunt和Gulp的工作方式是:在一個(gè)配置文件中朵夏,指明對(duì)某些文件進(jìn)行類(lèi)似編譯蔼啦,組合,壓縮等任務(wù)的具體步驟仰猖,這個(gè)工具之后可以自動(dòng)替你完成這些任務(wù)捏肢。

Webpack的工作方式是:把你的項(xiàng)目當(dāng)做一個(gè)整體奈籽,通過(guò)一個(gè)給定的主文件(如:index.js),Webpack將從這個(gè)文件開(kāi)始找到你的項(xiàng)目的所有依賴(lài)文件鸵赫,使用loaders處理它們衣屏,最后打包為一個(gè)瀏覽器可識(shí)別的JavaScript文件。

Webpack的處理速度更快更直接辩棒,能打包更多不同類(lèi)型的文件狼忱。

7:npm script是什么?如何使用一睁?

npm 允許在package.json文件里面钻弄,使用scripts字段定義腳本命令。供 npm 直接調(diào)用者吁。

{
  // ...
  "scripts": {
    "build": "node build.js"
  }
}

上面代碼是package.json文件的一個(gè)片段窘俺,里面的scripts字段是一個(gè)對(duì)象。它的每一個(gè)屬性复凳,對(duì)應(yīng)一段腳本瘤泪。比如,build命令對(duì)應(yīng)的腳本是node build.js育八。

命令行下使用npm run命令对途,就可以執(zhí)行這段腳本。

$ npm run build
# 等同于執(zhí)行
$ node build.js
8: 使用 webpack 替換 入門(mén)-任務(wù)15中模塊化使用的 requriejs

預(yù)覽
代碼

9:gulp是什么单鹿?使用 gulp 實(shí)現(xiàn)圖片壓縮掀宋、CSS 壓縮合并、JS 壓縮合并

gulp是前端開(kāi)發(fā)過(guò)程中對(duì)代碼進(jìn)行自動(dòng)化構(gòu)建的利器仲锄。它不僅能對(duì)資源進(jìn)行優(yōu)化劲妙,而且在開(kāi)發(fā)過(guò)程中能夠通過(guò)配置自動(dòng)完成很多重復(fù)的任務(wù),讓我們可以專(zhuān)注于代碼儒喊,提高工作效率镣奋。
使用gulp可以做什么:
1.編譯 sass
2.合并優(yōu)化壓縮 css
3.校驗(yàn)壓縮 js
4.優(yōu)化圖片
5.添加文件指紋(md5)
6.組件化頭部底部(include html)
7.實(shí)時(shí)自動(dòng)刷新…

各種插件及使用


var gulp = require('gulp'), // 必須先引入gulp插件
    del = require('del'),  // 文件刪除
    sass = require('gulp-ruby-sass'), // sass 編譯
    cached = require('gulp-cached'), // 緩存當(dāng)前任務(wù)中的文件,只讓已修改的文件通過(guò)管道
    uglify = require('gulp-uglify'), // js 壓縮
    rename = require('gulp-rename'), // 重命名
    concat = require('gulp-concat'), // 合并文件
    notify = require('gulp-notify'), // 相當(dāng)于 console.log()
    filter = require('gulp-filter'), // 過(guò)濾篩選指定文件
    jshint = require('gulp-jshint'), // js 語(yǔ)法校驗(yàn)
    rev = require('gulp-rev-append'), // 插入文件指紋(MD5)
    cssnano = require('gulp-cssnano'), // CSS 壓縮
    imagemin = require('gulp-imagemin'), // 圖片優(yōu)化
    browserSync = require('browser-sync'), // 保存自動(dòng)刷新
    fileinclude = require('gulp-file-include'), // 可以 include html 文件
    autoprefixer = require('gulp-autoprefixer'); // 添加 CSS 瀏覽器前綴

圖片壓縮

1怀愧、基本使用
var gulp = require('gulp'),
    imagemin = require('gulp-imagemin');
 
gulp.task('testImagemin', function () {
    gulp.src('src/img/*.{png,jpg,gif,ico}')
        .pipe(imagemin())
        .pipe(gulp.dest('dist/img'));
});
2侨颈、gulp-imagemin其他參數(shù)
var gulp = require('gulp'),
    imagemin = require('gulp-imagemin');
 
gulp.task('testImagemin', function () {
    gulp.src('src/img/*.{png,jpg,gif,ico}')
        .pipe(imagemin({
            optimizationLevel: 5, //類(lèi)型:Number  默認(rèn):3  取值范圍:0-7(優(yōu)化等級(jí))
            progressive: true, //類(lèi)型:Boolean 默認(rèn):false 無(wú)損壓縮jpg圖片
            interlaced: true, //類(lèi)型:Boolean 默認(rèn):false 隔行掃描gif進(jìn)行渲染
            multipass: true //類(lèi)型:Boolean 默認(rèn):false 多次優(yōu)化svg直到完全優(yōu)化
        }))
        .pipe(gulp.dest('dist/img'));
});
命令提示符執(zhí)行:gulp testImagemin

CSS 壓縮合并

var gulp = require('gulp'),
    cssnano = require('gulp-cssnano'),
    concat = require('gulp-concat');

gulp.task('cssmin',function(){
 gulp.src('src/css/*.css')
     .pipe(concat(min.css))      //合并后的文件名
     .pipe(cssnano())              
     .pipe(gulp.dest(dist/css));
}); 

JS 壓縮合并

var gulp = require('gulp'),
    uglify = require('gulp-uglify'),
    concat = require('gulp-concat');

gulp.tast('jsmin',function(){ 
 gulp.src('src/js/*.js')
     .pipe(jsmin())
     .pipe(concat('all.js'))
     .pipe(gulp.dest('dist/js'));
}); 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市芯义,隨后出現(xiàn)的幾起案子哈垢,更是在濱河造成了極大的恐慌,老刑警劉巖扛拨,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耘分,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)求泰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)央渣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人渴频,你說(shuō)我怎么就攤上這事芽丹。” “怎么了卜朗?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵拔第,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我场钉,道長(zhǎng)楼肪,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任惹悄,我火速辦了婚禮,結(jié)果婚禮上肩钠,老公的妹妹穿的比我還像新娘泣港。我一直安慰自己,他們只是感情好价匠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布当纱。 她就那樣靜靜地躺著,像睡著了一般踩窖。 火紅的嫁衣襯著肌膚如雪坡氯。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天洋腮,我揣著相機(jī)與錄音箫柳,去河邊找鬼。 笑死啥供,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伙狐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼贷屎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了唉侄?” 一聲冷哼從身側(cè)響起咒吐,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渤滞,沒(méi)想到半個(gè)月后贬墩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體妄呕,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陶舞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绪励。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肿孵。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疏魏,死狀恐怖停做,靈堂內(nèi)的尸體忽然破棺而出大莫,到底是詐尸還是另有隱情,我是刑警寧澤只厘,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站河咽,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏忘蟹。R本人自食惡果不足惜搁凸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坪仇。 院中可真熱鬧,春花似錦喂很、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春器予,著一層夾襖步出監(jiān)牢的瞬間捐迫,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工施戴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雷则。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓肪笋,卻偏偏與公主長(zhǎng)得像月劈,于是被迫代替她去往敵國(guó)和親藤乙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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