npm-npmscript-gulp-webpack

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

npm install -g app

2: package.json 有什么作用髓考?

相當(dāng)于你本地項(xiàng)目的一個(gè)文檔說(shuō)明涨享。
允許你指定你項(xiàng)目中所使用的node包的版本铛绰。
構(gòu)建你的項(xiàng)目更加容易浙垫,便于給其他人共享兜畸。

   {
        "name": "my_package",     //你的項(xiàng)目名稱疫鹊,全部小寫拆吆,不能有空格砌庄,一個(gè)單詞娄昆,允許-和_. 
                                  //如果是要發(fā)布自己的node插件,一般用github上面項(xiàng)目名稱缝彬。 

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

        "main": "index.js", //目錄中啟動(dòng)文件名稱谷浅“歉或者稱之為入口文件,一般都是 index.js

        "scripts": {

            "test": "echo \"Error: no test specified\" && exit 1"    
            //一般默認(rèn)一個(gè)test的空文件夾一疯、用作寫測(cè)試代碼撼玄。

        },

        "keywords": [],  //項(xiàng)目的關(guān)鍵詞。 一般用不到墩邀,發(fā)布npm才用得到掌猛。

        "author": "ag_dubs", //作者名稱

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

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

            "type": "git",

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

        },

        "dependencies": {   // 正式使用時(shí)眉睹,依賴的包

            "my_dep": "^1.0.0"

        },

        "devDependencies" : {//開發(fā)或者測(cè)試時(shí)荔茬,依賴的包。

            "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ā)布才有用

    }

一般情況慕蔚,如果是自己的項(xiàng)目,特別是前端的人斋配,會(huì)使用到gulp或者grunt來(lái)打包自己的項(xiàng)目孔飒,并且一般不會(huì)吧node_modules上傳到git上面,所以需要package來(lái)管理自己打包所需的插件许起,以便于項(xiàng)目中其他人員共享十偶,這個(gè)文件的好處就是一個(gè)人添加某個(gè)插件后,更改了這個(gè)文件园细,其他人員只需要同步此文件,然后執(zhí)行npm install命令接校,即可安裝同樣的包猛频。

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

--save 會(huì)把依賴包名稱添加到 package.json 文件 dependencies 鍵下狮崩,--save-dev 則添加到 package.json 文件 devDependencies 鍵下
區(qū)別是,devDependencies 下列出的模塊鹿寻,是我們開發(fā)時(shí)用的睦柴;dependencies 下的模塊,則是我們發(fā)布后還需要依賴的模塊毡熏,譬如像jQuery庫(kù)或者Angular框架類似的坦敌,我們?cè)陂_發(fā)完后后肯定還要依賴它們,否則就運(yùn)行不了痢法。

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

node_modules的查找路徑:先從本地目錄下尋找狱窘,不存在就依次向上級(jí)目錄中查詢,直到系統(tǒng)根目錄财搁。node全局安裝在系統(tǒng)根目錄下蘸炸,所以全局安裝后可在所有目錄下使用

5:npm3 與 npm2相比有什么改進(jìn)?

這個(gè)問(wèn)題如果在很久以前打開你的node-moudles文件夾一探究竟的同學(xué)就會(huì)有感覺(jué)尖奔,當(dāng)時(shí)里面的目錄很清晰搭儒,一個(gè)packages就是一個(gè)目錄,里面再包括自身文件和依賴包提茁。 后來(lái)有一天再打開驚呆了淹禾,里面一堆目錄,當(dāng)時(shí)覺(jué)得這很不neat茴扁,很不優(yōu)雅稀拐。google的是npm更新到了npm3之后才發(fā)現(xiàn)自己的愚蠢,我們來(lái)看一張圖丹弱。


Paste_Image.png

現(xiàn)在我們看到的是npm2的包依賴的目錄構(gòu)成形式德撬,很容易發(fā)現(xiàn)一個(gè)問(wèn)題,如果一個(gè)鏈?zhǔn)揭蕾嚪浅I疃愀欤夸浵鄳?yīng)也會(huì)越來(lái)越深蜓洪,在我們定義css樣式的時(shí)候就接觸到一個(gè)概念: 層級(jí)查找是很慢的.
html>body>div.container>ul.gallery>li.item>img.image => 慢到爆炸!!!
同樣的遞進(jìn)目錄查找同樣慢坯苹,越深越慢隆檀。而且還會(huì)存在一個(gè)問(wèn)題,(黃色圈)當(dāng)我們的不同modules對(duì)相同的包進(jìn)行依賴時(shí)粹湃,會(huì)出現(xiàn)重復(fù)恐仑,而且很有可能它們的版本不一樣(二次開發(fā))但他們的層級(jí)是一樣的(很不logical).

再看看npm3的扁平式目錄結(jié)構(gòu)策略: 將所有的依賴優(yōu)先放置第一級(jí)目錄(即'/node-modules'/下),看圖解釋:


Paste_Image.png

APP依賴Module A
Module A 依賴 Module B ----------------- ./node-modules
Module A 依賴 Module C ----------------- ./node-modules
Module B 依賴 Module D version 1.0 ----- ./node-modules
Module C 依賴 Module D version 2.0 ----- ./node-modules/ModuleC/
很清晰:So为鳄,當(dāng)遇到版本不同時(shí)裳仆,npm3會(huì)將更高版本者放入依賴它的Module之下,層級(jí)關(guān)系映射版本關(guān)系孤钦,有種漸進(jìn)增強(qiáng)的感覺(jué)歧斟,低版本作為基礎(chǔ)依賴纯丸,版本遞進(jìn)則深入一層目錄。 而其他的不存在版本遞進(jìn)的Module一律放入第一層目錄静袖,大大減少了查找時(shí)間觉鼻,提高效率。

yarn和 npm 相比有什么優(yōu)勢(shì)?
yarn是facebook為自己的sandbox形式的開發(fā)環(huán)境創(chuàng)造的包管理器队橙,既然是sandbox坠陈,摒棄外部環(huán)境時(shí),對(duì)于離線形式的包安裝的支持就很重要捐康,這也是它的最大特點(diǎn): 對(duì)所有已經(jīng)安裝過(guò)的包進(jìn)行cache緩存仇矾,下次安裝這些包時(shí)直接從緩存里拉取,對(duì)比與npm對(duì)網(wǎng)絡(luò)環(huán)境的依賴吹由,yarn解決了這個(gè)痛點(diǎn)若未。

More advantages over npm:

相對(duì)于npm的隊(duì)列式安裝(當(dāng)一個(gè)包安裝完畢后才會(huì)執(zhí)行下一個(gè)),yarn支持Parallel Installation倾鲫,速度更快粗合。
yarn.lock: 這是一個(gè)版本鎖,它記錄了所有包的版本信息乌昔,也就是說(shuō)隙疚,它保證了在任何一臺(tái)設(shè)備上,你對(duì)于包的拉取安裝都是嚴(yán)格遵循這個(gè)版本信息磕道,從而保證不出現(xiàn): But it works on my computer 這樣煩人的問(wèn)題供屉。
clean: yarn支持清理命令,可以清理node-modules目錄下的包文件溺蕉,比如一些捆綁進(jìn)入的廣告以及不必要的文件伶丐。
網(wǎng)絡(luò)恢復(fù): 一個(gè)單獨(dú)的請(qǐng)求并不會(huì)導(dǎo)致整個(gè)安裝失敗,這些請(qǐng)求可以重試直到請(qǐng)求恢復(fù)正常疯特。
不得不說(shuō)哗魂,F(xiàn)家還是很任性的,一言不合就造個(gè)輪子給自己用漓雅,而且還比市面的大輪子更好.

6: webpack是什么录别?和其他同類型工具比有什么優(yōu)勢(shì)?

Webpack 是當(dāng)下最熱門的前端資源模塊化管理和打包工具邻吞。它可以將許多松散的模塊按照依賴和規(guī)則打包成符合生產(chǎn)環(huán)境部署的前端資源组题。還可以將按需加載的模塊進(jìn)行代碼分隔,等到實(shí)際需要的時(shí)候再異步加載抱冷。通過(guò) loader 的轉(zhuǎn)換崔列,任何形式的資源都可以視作模塊,比如 CommonJs 模塊徘层、 AMD 模塊峻呕、 ES6 模塊利职、CSS趣效、圖片瘦癌、 JSON、Coffeescript跷敬、 LESS 等讯私。
優(yōu)勢(shì):

  • 對(duì) CommonJS 、 AMD 西傀、ES6的語(yǔ)法做了兼容
  • 對(duì)js斤寇、css、圖片等資源文件都支持打包
  • 串聯(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è)屬性,可以在這個(gè)屬性中自定義npm命令腳本归苍,簡(jiǎn)化操作用狱。

"scripts": {
"run": "npm install -g npm",
"webpack":"webpack",
"start":"npm run build"
}
在package.json的scripts內(nèi)添加鍵值對(duì)("name":"命令"),之后便可以使用了拼弃。
命令可以是命令行命令夏伊,npm程序,也可以是scripts內(nèi)自定義的命令肴敛。
start和test命令可以不用加run署海,直接輸入npm start/npm test即可操作,其他自定義命令設(shè)置完成医男,在終端內(nèi)便可以通過(guò)npm run name來(lái)執(zhí)行砸狞。

9:gulp是什么?使用 gulp 實(shí)現(xiàn)圖片壓縮镀梭、CSS 壓縮合并刀森、JS 壓縮合并

gulp是一個(gè)自動(dòng)化構(gòu)建工具,開發(fā)者可以使用它在項(xiàng)目開發(fā)過(guò)程中自動(dòng)執(zhí)行常見任務(wù)使用 gulp 實(shí)現(xiàn)圖片壓縮、CSS 壓縮合并报账、JS 壓縮合并.

var gulp = require('gulp')

var cssnano = require('gulp-cssnano'), //css壓縮
    uglify = require('gulp-uglify'), //js壓縮
    concat = require('gulp-concat'), //合并文件

    rename = require('gulp-rename'), //重命名
    clean = require('gulp-clean'), //清空文件夾

    minhtml = require('gulp-htmlmin'), //html壓縮
    jshint = require('gulp-jshint'), //js代碼規(guī)范檢查
    imagemin = require('gulp-imagemin') //圖片壓縮

gulp.task('html', function() {
    return gulp.src('src/*.html')
        .pipe(minhtml({ collapseWhitespace: true }))
        .pipe(gulp.dest('dist'))
})
gulp.task('css', function() {
    return gulp.src('src/css/*.css')
        .pipe(concat('merge.min.css'))
        .pipe(cssnano())
        .pipe(gulp.dest('dist/css/'))
})

gulp.task('js', function() {
    return gulp.src('src/js/*.js')
        .pipe(jshint())
        .pipe(jshint.reporter('default'))
        .pipe(concat('merge.js'))
        .pipe(rename({
            suffix: '.min' //換個(gè)名字
        }))
        .pipe(uglify())
        .pipe(gulp.dest('dist/js/'))
})

gulp.task('img', function() {
    return gulp.src('src/imgs/*')
        .pipe(imagemin())
        .pipe(gulp.dest('dist/imgs/'))
})

gulp.task('clear', function() {
    return gulp.src('dist/*', { read: false })
        .pipe(clean())
})

gulp.task('build', ['html', 'css', 'js', 'img'])
//命令行
gulp build
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末研底,一起剝皮案震驚了整個(gè)濱河市埠偿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌榜晦,老刑警劉巖冠蒋,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異乾胶,居然都是意外死亡抖剿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門识窿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)斩郎,“玉大人,你說(shuō)我怎么就攤上這事喻频∷跻耍” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵甥温,是天一觀的道長(zhǎng)锻煌。 經(jīng)常有香客問(wèn)我,道長(zhǎng)窿侈,這世上最難降的妖魔是什么炼幔? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮史简,結(jié)果婚禮上乃秀,老公的妹妹穿的比我還像新娘。我一直安慰自己圆兵,他們只是感情好跺讯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著殉农,像睡著了一般刀脏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上超凳,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天愈污,我揣著相機(jī)與錄音,去河邊找鬼轮傍。 笑死暂雹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的创夜。 我是一名探鬼主播杭跪,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了涧尿?” 一聲冷哼從身側(cè)響起系奉,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎姑廉,沒(méi)想到半個(gè)月后缺亮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庄蹋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年瞬内,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迷雪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片限书。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖章咧,靈堂內(nèi)的尸體忽然破棺而出倦西,到底是詐尸還是另有隱情,我是刑警寧澤赁严,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布扰柠,位于F島的核電站,受9級(jí)特大地震影響疼约,放射性物質(zhì)發(fā)生泄漏卤档。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一程剥、第九天 我趴在偏房一處隱蔽的房頂上張望劝枣。 院中可真熱鬧,春花似錦织鲸、人聲如沸舔腾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)稳诚。三九已至,卻和暖如春瀑踢,著一層夾襖步出監(jiān)牢的瞬間扳还,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工橱夭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氨距,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓徘钥,卻偏偏與公主長(zhǎng)得像衔蹲,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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

  • 1: 如何全局安裝一個(gè) node 應(yīng)用? 全局安裝:package會(huì)被下載到到特定的系統(tǒng)目錄下( /usr/loc...
    yuhuan121閱讀 394評(píng)論 0 0
  • 1. 如何全局安裝一個(gè) node 應(yīng)用? 2. package.json 有什么作用舆驶? 執(zhí)行npm init -y...
    hui_mamba閱讀 330評(píng)論 0 0
  • 1. 如何全局安裝一個(gè) node 應(yīng)用? 2. package.json 有什么作用橱健? 每個(gè)項(xiàng)目的根目錄下面...
    66dong66閱讀 284評(píng)論 0 2
  • 1.如何全局安裝一個(gè) node 應(yīng)用? 打開你的命令行工具輸入npm install 'packages name...
    Rising_suns閱讀 343評(píng)論 0 0
  • 1. 如何全局安裝一個(gè) node 應(yīng)用? 在終端輸入npm install -g pkg pkg為安裝包的名字pk...
    _李祺閱讀 218評(píng)論 0 1