npm

1. 如何全局安裝一個 node 應用?

npm install -g xxx

2.package.json 有什么作用滚朵?

package.json文件,定義了這個項目所需要的各種模塊蜻拨,以及項目的配置信息(比如名稱掐场、版本、許可證等元數(shù)據(jù))旋膳。npm install命令根據(jù)這個配置文件澎语,自動下載所需的模塊,也就是配置項目所需的運行和開發(fā)環(huán)境验懊。
下面是一個比較完整的package.json文件擅羞。

{
//name是項目名稱
    "name": "Hello World",
//version是版本號 一般遵守(大版本.次要版本.小版本”的格式)
    "version": "0.0.1",
//author作者
    "author": "張三",
//description描述
    "description": "第一個node.js程序",
//keyword是關鍵字方便npm search的搜索
    "keywords":["node.js","javascript"],
    "repository": {
        "type": "git",
        "url": "https://path/to/url"
    },
//license是指定一個許可證,讓人知道使用的權(quán)利和限制的
    "license":"MIT",
//engines你可以指定工作的node的版本
    "engines": {"node": "0.10.x"},
//bugs是你項目的提交問題的url和(或)郵件地址鲁森。你可以指定一個或者指定兩個祟滴。如果你只想提供一個url,那就不用對象了歌溉,字符串就行垄懂。
    "bugs":{"url":"http://path/to/bug","email":"bug@example.com"},
    "contributors":[{"name":"李四","email":"lisi@example.com"}],
//scripts指定了運行腳本命令的npm命令行縮寫,比如start指定了運行npm run start時痛垛,所要執(zhí)行的命令草慧。
    "scripts": {
        "start": "node index.js"
    },
//dependencies字段指定了項目運行所依賴的模塊
    "dependencies": {
        "express": "latest",
        "mongoose": "~3.8.3",
        "handlebars-runtime": "~1.0.12",
        "express3-handlebars": "~0.5.0",
        "MD5": "~1.2.0"
    },
//devDependencies指定項目開發(fā)所需要的模塊。
    "devDependencies": {
        "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ū)別?

當你為你的模塊安裝一個依賴模塊時匙头,正常情況下你得先安裝他們(在模塊根目錄下npm install module-name)漫谷,然后連同版本號手動將他們添加到模塊配置文件package.json中的依賴里(dependencies)。

--save--save-dev可以省掉你手動修改package.json文件的步驟蹂析。
npm install --save module-name 自動把模塊和版本號添加到dependencies部分
npm install --save-dve module-name 自動把模塊和版本號添加到devdependencies部分
dependencies:生產(chǎn)依賴
devdependencies:開發(fā)依賴

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

就近原則舔示,先在當前目錄下的node_modules下面找,如果沒找到电抚,逐級往上找惕稻,直到根目錄。

5.npm3與 npm2相比有什么改進蝙叛?yarn和 npm 相比有什么優(yōu)勢?

npm3相較于npm2而言優(yōu)化了依賴包的管理俺祠。解決了windows上npm包目錄太深的問題。
舉個例子:
假如我們寫了個模塊App,需要安裝兩個包A@1和C@1蜘渣,其中A@1依賴另一個包B@1淌铐,C@1依賴B@2,用npm2和npm3安裝之后的依賴圖分別是這樣的

Paste_Image.png

npm3按照安裝順序存放依賴模塊蔫缸,先安裝A@1腿准,發(fā)現(xiàn)依賴模塊B@1沒有安裝過也沒有其他版本的B模塊沖突,所以B@1存放在第一級目錄捂龄,B@2為了避免和B@1的沖突释涛,還是繼續(xù)放在C@1之下加叁。
npm2沒什么好說的倦沧,來什么安裝什么,根本不用理會公共依賴關系它匕,依賴模塊一層一層往下存放就是了展融,下面重點講解npm3在這方面的改進。
現(xiàn)在App又需要安裝一個包D@1豫柬,D@1依賴B@2告希,使用npm3安裝之后,包結(jié)構(gòu)將變成下面這樣

Paste_Image.png

雖然C@1和D@1都依賴B@2烧给,但是由于A@1先安裝燕偶,A@1依賴的B@1已經(jīng)安裝到第一級目錄了,后續(xù)需要安裝的所有包B础嫡,只要版本不是1指么,都需要避免和B@1的沖突,所以只能像npm2一樣榴鼎,安裝在相應包下面伯诬。
接著又安裝了一個E@1,依賴B@1巫财,因為B@1已經(jīng)安裝過盗似,且不會有版本沖突,這時候就不用重復安裝B@1了平项,包結(jié)構(gòu)會變成這樣

Paste_Image.png

隨著App升級了赫舒,需要把A@1升級到A@2,而A@2依賴B@2闽瓢,把E@1升級到E@2接癌,E@2也依賴B@2,那么B@1將不會再被誰依賴鸳粉,npm將卸載B@1扔涧,新的包結(jié)構(gòu)將變成這樣

Paste_Image.png

可以看到出現(xiàn)了冗余,結(jié)果跟預期的不一樣枯夜,既然所有對B的依賴都是B@2弯汰,那么只安裝一次就夠了湖雹。
npm dedupe
npm在安裝包的時候沒有這么“智能”,不過npm dedupe命令做的事就是重新計算依賴關系摔吏,然后將包結(jié)構(gòu)整理得更合理鸽嫂。
執(zhí)行一遍npm dedupe將得到

Paste_Image.png

yarn和 npm 相比有什么優(yōu)勢?

  • Yarn 有一個鎖定文件 (lock file) 記錄了被確切安裝上的模塊的版本號征讲。每次只要新增了一個模塊,Yarn 就會創(chuàng)建(或更新)yarn.lock 這個文件诗箍。這么做就保證了癣籽,每一次拉取同一個項目依賴時,使用的都是一樣的模塊版本

  • Yarn在拉取包的時候滤祖,是采用了并行安裝筷狼,所以相較于npm的列隊安裝的速度會快很多匠童。

6. webpack是什么?和其他同類型工具比有什么優(yōu)勢俏险?

webpack是一款模塊加載器兼打包工具首昔,它能把各種資源寡喝,例如JS(含JSX)勒奇、coffee、樣式(含less/sass)格二、圖片等都作為模塊來使用和處理竣蹦。

webpack的優(yōu)勢:

  1. webpack 是以 commonJS 的形式來書寫腳本,但對 AMD/CMD 的支持也很全面痘括,方便舊項目進行代碼遷移滔吠。
  2. 能被模塊化的不僅僅是 JS 了挠日。
  3. 開發(fā)便捷,能替代部分 grunt/gulp 的工作冬骚,比如打包懂算、壓縮混淆、圖片轉(zhuǎn)base64等计技。
  4. 擴展性強,插件機制完善住诸,特別是支持 React 熱插拔(見 react-hot-loader )的功能讓人眼前一亮涣澡。

7.npm script是什么丧诺?如何使用入桂?

就是npm的腳本語句呀驳阎,作用就是可以只寫一個指令,然后完成很多操作蜘腌。就好像游戲里面的定義宏饵隙,你按一個鍵,可以丟出一堆技能金矛。減少了很多操作。
首先你需要一個package.json

package.json

紅色框里的就是npm script驶俊,我們先可以試試看。

npm

在命令行中輸入 npm test之后就自動執(zhí)行了寬中定義的內(nèi)容榕酒。
我們也可以自己自定義,當時只能定義npm規(guī)定的一些字符

image.png

但是不按照這些定義也可以澜掩,當時在運行的時候 需要npm run 你定義的

8. 使用 webpack 替換 入門-任務15中模塊化使用的 requriejs

代碼
預覽

9.gulp是什么杖挣?使用 gulp 實現(xiàn)圖片壓縮、CSS 壓縮合并惩妇、JS 壓縮合并

gulp是基于流的自動化構(gòu)建工具∏锹瑁可以自動對css氓皱,js還有圖片進行壓縮。和npm script的概念是一樣的波材,用一個指令批量處理一堆事情,不過gulp可以做的要多很多唯灵。
** gulp 實現(xiàn)圖片壓縮**
第一步隙轻、在命令行輸入

npm install --save-dev gulp-imagemin

前提是要安裝了 gulp

第二步、創(chuàng)建 gulpfile.js 文件編寫代碼

// 獲取 gulp
var gulp = require('gulp')
    // 獲取 gulp-imagemin 模塊
var imagemin = require('gulp-imagemin')

// 壓縮圖片任務
// 在命令行輸入 gulp images 啟動此任務
gulp.task('images', function() {
    // 1. 找到圖片
    gulp.src('images/*.*')
        // 2. 壓縮圖片
        .pipe(imagemin({
            progressive: true
        }))
        // 3. 另存圖片
        .pipe(gulp.dest('dist/images'))
});


// 在命令行使用 gulp auto 啟動此任務
gulp.task('auto', function() {
        gulp.watch('images/*.*', ['images'])
    })
    // 使用 gulp.task('default') 定義默認任務
    // 在命令行使用 gulp 啟動 images 任務和 auto 任務
gulp.task('default', ['images', 'auto'])

CSS 壓縮合并
第一步敛瓷、在命令行輸入

npm install gulp-minify-css

第二步斑匪、創(chuàng)建 gulpfile.js 文件編寫代碼

// 獲取 gulp
var gulp = require('gulp')

// 獲取 minify-css 模塊(用于壓縮 CSS)
var minifyCSS = require('gulp-minify-css')

// 壓縮 css 文件
// 在命令行使用 gulp css 啟動此任務
gulp.task('css', function () {
    // 1. 找到文件
    gulp.src('css/*.css')
    // 2. 壓縮文件
        .pipe(minifyCSS())
    // 3. 另存為壓縮文件
        .pipe(gulp.dest('dist/css'))
})

// 在命令行使用 gulp auto 啟動此任務
gulp.task('auto', function () {
    // 監(jiān)聽文件修改,當文件被修改則執(zhí)行 css 任務
    gulp.watch('css/*.css', ['css'])
});

// 使用 gulp.task('default') 定義默認任務
// 在命令行使用 gulp 啟動 css 任務和 auto 任務
gulp.task('default', ['css', 'auto'])

JS 壓縮合并
第一步绝淡、

npm install gulp-uglify

第二步苍姜、

// 獲取 gulp
var gulp = require('gulp')

// 獲取 uglify 模塊(用于壓縮 JS)
var uglify = require('gulp-uglify')

// 壓縮 js 文件
// 在命令行使用 gulp script 啟動此任務
gulp.task('script', function() {
    // 1. 找到文件
    gulp.src('js/*.js')
    // 2. 壓縮文件
        .pipe(uglify())
    // 3. 另存壓縮后的文件
        .pipe(gulp.dest('dist/js'))
})

// 在命令行使用 gulp auto 啟動此任務
gulp.task('auto', function () {
    // 監(jiān)聽文件修改,當文件被修改則執(zhí)行 script 任務
    gulp.watch('js/*.js', ['script'])
})


// 使用 gulp.task('default') 定義默認任務
// 在命令行使用 gulp 啟動 script 任務和 auto 任務
gulp.task('default', ['script', 'auto'])
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末馍乙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子丝格,更是在濱河造成了極大的恐慌,老刑警劉巖预伺,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件曼尊,死亡現(xiàn)場離奇詭異,居然都是意外死亡瞒御,警方通過查閱死者的電腦和手機神郊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜻懦,“玉大人爷怀,你說我怎么就攤上這事阻肩≡耸冢” “怎么了乔煞?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵渡贾,是天一觀的道長。 經(jīng)常有香客問我空骚,道長,這世上最難降的妖魔是什么熬甚? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任肋坚,我火速辦了婚禮肃廓,結(jié)果婚禮上诲泌,老公的妹妹穿的比我還像新娘。我一直安慰自己敷扫,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布绘迁。 她就那樣靜靜地躺著羹幸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪将硝。 梳的紋絲不亂的頭發(fā)上屏镊,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音而芥,去河邊找鬼。 笑死误辑,一個胖子當著我的面吹牛歌逢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播秘案,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼阱高,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了赤惊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤黍少,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后厂置,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡智绸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年瞧栗,在試婚紗的時候發(fā)現(xiàn)自己被綠了海铆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡卧斟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锤岸,到底是詐尸還是另有隱情板乙,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布募逞,位于F島的核電站,受9級特大地震影響戒职,放射性物質(zhì)發(fā)生泄漏透乾。R本人自食惡果不足惜磕秤,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望汉操。 院中可真熱鬧,春花似錦磷瘤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽篡帕。三九已至贸呢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間楞陷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工结执, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留魏铅,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓斜姥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親铸敏。 傳聞我的和親對象是個殘疾皇子悟泵,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

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