npm-npmscript-gulp-webpack

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

  • npm install -g xx

題目2: package.json 有什么作用对途?package.json是什么?package.json如何創(chuàng)建啸蜜?

  • package.json文件描述了一個(gè)NPM包坑雅,包括作者、簡介衬横、包的依賴裹粤、構(gòu)建等所有信息。
  • 通常在創(chuàng)建NPM包時(shí)冕香,可以在命令行輸入nmp init命令自動(dòng)生成一個(gè)package.json文件蛹尝,里面包含了一些常用的字段。還可以根據(jù)實(shí)際需求來自行完善或創(chuàng)建package.json文件悉尾。
  • package.json
    文件包含的常用配置字段:
  • name
    name和version是package.json中最重要的兩個(gè)字段,也是發(fā)布到NPM平臺(tái)上的唯一標(biāo)識挫酿,如果沒有正確設(shè)置這兩個(gè)字段构眯,包就不能發(fā)布和被下載。
  • version
    這個(gè)字段的取值需要符合node-semver的規(guī)則早龟,詳細(xì)可以見其文檔惫霸。
  • description
    包的描述信息,將會(huì)在npm search的返回結(jié)果中顯示葱弟,以幫助用戶了解包的用途壹店。
  • author
    包的作者,可以是字符串或?qū)ο蟆?/li>
  • files
    包所包含的所有文件芝加,可以取值為文件夾硅卢。還可以用.npmignore來去除不想包含到包里的文件。
  • main
    包的入口文件藏杖,如index.js
  • repository
    包的github倉庫地址将塑。
  • scripts
    通過設(shè)置這個(gè)可以使NPM調(diào)用一些命令腳本,封裝一些功能蝌麸。
  • config
    添加一些設(shè)置点寥,可以供scripts讀取用,同時(shí)這里的值也會(huì)被添加到系統(tǒng)的環(huán)境變量中来吩。
  • dependencies
    指定依賴的其它包敢辩,這些依賴是指包發(fā)布后正常執(zhí)行時(shí)所需要的,如果是開發(fā)中依賴的包弟疆,可以在devDependencies設(shè)置戚长。
{
    "name": "my_package",     //項(xiàng)目名稱
    "version": "1.0.0",  //項(xiàng)目版本號
    "main": "index.js", //入口文件
       // bin參數(shù)是{ 命令名:文件名 }的格式,指定了各個(gè)內(nèi)部命令對應(yīng)的可執(zhí)行文件的位置兽间,相當(dāng)于在user.local/bin下創(chuàng)建一個(gè)快捷方式
      // 執(zhí)行`server`,`mock`或`server-mock`命令時(shí)历葛,將運(yùn)行對應(yīng)文件(./bin/server)
      // ./bin/server文件頭部需添加 #!/usr/bin/env node, 表示將以node運(yùn)行這個(gè)文件
    "bin":{    
        "server":"./bin/server",
        "mock":"./bin/mock",
        "server-mock":"./bin/server-mock"
    },
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",    //一般默認(rèn)一個(gè)test的空文件夾、用作寫測試代碼恤溶,`npm test`即可運(yùn)行乓诽。
        "make":"echo 'hello world!' "  //自定義的命令名需加run才能與運(yùn)行,`npm run make`
    },
    "keywords": [],  //項(xiàng)目的關(guān)鍵詞咒程。 一般用不到鸠天,發(fā)布npm才用得到。
    "author": "candy", //作者名稱
    "license": "ISC", //協(xié)議 
    "repository": {  // 用來存放到 版本管理遠(yuǎn)程服務(wù)帐姻。 發(fā)布npm才有用
        "type": "git",
        "url": "https://github.com/ashleygwilliams/my_package.git"
    },
    "dependencies": {   // 正式使用時(shí)依賴的包, npm install --save xxx 生成
        "my_dep": "^1.0.0"
    },
    "devDependencies" : {//開發(fā)或者測試時(shí)稠集,依賴的包。npm install --save-dev xxx生成
        "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)目主頁饥瓷、 發(fā)布才有用
}

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

  • npm install --save app
    指項(xiàng)目正常運(yùn)行所依賴的包剥纷,沒有這個(gè)依賴,項(xiàng)目會(huì)出錯(cuò)呢铆。
  • npm install --save-dev app
    指項(xiàng)目開發(fā)測試過程中所用的工具晦鞋。

題目4: nodule_modules的查找路徑是怎樣的?

比如需要查找的依賴包叫“easytpl”,它會(huì)先在當(dāng)前目錄下查找node_module, 看有沒有easytpl文件夾(即easytpl包),如果有的話棺克,會(huì)讀取easytpl文件夾下的package.json,找到里面的main參數(shù),加載main里對應(yīng)的路徑的文件悠垛。如果當(dāng)前目錄下沒有node_module娜谊,或當(dāng)前目錄下的node_module沒找到easytpl确买,便向上級目錄中查詢,直到系統(tǒng)根目錄纱皆。


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

npm3相比npm2主要改進(jìn)了依賴管理方案
npm2安裝依賴的時(shí)候比較簡單直接衷敌,直接按照包的依賴的樹形結(jié)構(gòu)下載填充至本地目錄拓瞪,缺陷在于太深的目錄樹結(jié)構(gòu)會(huì)嚴(yán)重影響效率缴罗,甚至在window下可能會(huì)超出系統(tǒng)路徑限制的長度,另外有刪node_modules目錄經(jīng)歷的可能都漫長的等待祭埂。
針對 npm2 的問題面氓,npm3 加了點(diǎn)算法兵钮,直白的解釋就是:npm install 時(shí)會(huì)按照 package.json 里依賴的順序依次解析,遇到新的包就把它放在第一級目錄舌界,后面如果遇到一級目錄已經(jīng)存在的包掘譬,會(huì)先判斷版本,如果版本一樣則忽略呻拌,否則會(huì)按照 npm2 的方式依次掛在依賴包目錄下


在包版本差異化不太嚴(yán)重的情況下葱轩,這種構(gòu)建方式會(huì)幾乎把所有包放在一級目錄下,很大程度下提升了效率以及節(jié)省了部分磁盤空間藐握。但是npm3又遇到了新問題靴拱,有可能開發(fā)環(huán)境和測試環(huán)境的node_modules的目錄結(jié)構(gòu)不一樣,以及其他因素猾普,faceboook開發(fā)了yarn來替代npm袜炕。
yarn優(yōu)點(diǎn)在于只要通過Yarn安裝過的套件都會(huì)在本地目錄產(chǎn)生Cache,也就是說只要安裝過依次抬闷,下次重新安裝都會(huì)從Cache重新讀取妇蛀, 安裝速度會(huì)提升很多。


題目6: webpack是什么笤成?和其他同類型工具比有什么優(yōu)勢?

  • webpack是一個(gè)module bundler(模塊打包工具)眷茁,所謂的模塊就是在平時(shí)的前端開發(fā)中炕泳,用到一些靜態(tài)資源,如JavaScript上祈、CSS培遵、圖片等文件,webpack就將這些靜態(tài)資源文件稱之為模塊登刺。webpack支持AMD和CommonJS籽腕,以及其他的一些模塊系統(tǒng),并且兼容多種JS書寫規(guī)范纸俭,可以處理模塊間的以來關(guān)系皇耗,所以具有更強(qiáng)大的JS模塊化的功能, 它能對靜態(tài)資源進(jìn)行統(tǒng)一的管理以及打包發(fā)布 揍很。

  • 優(yōu)勢:

  1. 對 CommonJS 郎楼、AMD 、ES6的語法做了兼容窒悔;
  2. 對js呜袁、css、圖片等資源文件都支持打包简珠;
  3. 串聯(lián)式 模塊加載器 以及 插件機(jī)制 阶界,讓其具有更好的靈活性和擴(kuò)展性,例如提供對CoffeeScript、ES6的支持膘融;
  4. 有獨(dú)立的配置文件webpack.config.js芙粱;
  5. 可以將代碼切割成不同的chunk,實(shí)現(xiàn)按需加載托启,降低了初始化時(shí)間宅倒;
  6. 支持 SourceUrls 和 SourceMaps,易于調(diào)試屯耸;
  7. 具有強(qiáng)大的Plugin接口拐迁,大多是內(nèi)部插件,使用起來比較靈活疗绣;
  8. webpack 使用異步 IO 并具有多級緩存线召。這使得 webpack 很快且在增量編譯上更加快;

題目7:npm script是什么多矮?如何使用缓淹?

scripts屬性是一個(gè)對象,里邊指定了項(xiàng)目的生命周期個(gè)各個(gè)環(huán)節(jié)需要執(zhí)行的命令塔逃。key是生命周期中的事件讯壶,value是要執(zhí)行的命令。

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

上述代碼是package.json
文件的一個(gè)小片段湾盗,里面的script
字段是一個(gè)對象伏蚊。每個(gè)屬性對應(yīng)一段腳本,比如格粪,build
命令對應(yīng)的腳本是node build.js躏吊。在命令行里

$ npm run build/* 等同于執(zhí)行:*/$ node build.js


題目8: 使用 webpack 替換 入門-任務(wù)15中模塊化使用的 requriejs

代碼


題目9:gulp是什么?使用 gulp 實(shí)現(xiàn)圖片壓縮帐萎、CSS 壓縮合并比伏、JS 壓縮合并

gulp是前端開發(fā)過程中對代碼進(jìn)行構(gòu)建的工具,是自動(dòng)化項(xiàng)目的構(gòu)建利器疆导;不僅能對網(wǎng)站資源進(jìn)行優(yōu)化赁项,而且在開發(fā)過程中很多重復(fù)的任務(wù)能夠使用正確的工具自動(dòng)完成;使用它不僅可以很愉快的編寫代碼是鬼,而且大大提高工作效率肤舞。

var gulp = require('gulp')
//js壓縮插件
var jsmin = require('gulp-uglify')
//css壓縮插件 
var cssnano = require('gulp-cssnano') 
//img壓縮插件 
var imgmin = require('gulp-imagemin')
//文件合并插件
var concat = require('gulp-concat')
//html 壓縮插件
var minhtml = require('gulp-htmlmin')

gulp.task('cssmin',function(){
 gulp.src('src/css/*.css')
     .pipe(concat(min.css))
     .pipe(cssnano())
     .pipe(gulp.dest(dist/css));
}); 

gulp.tast('jsmin',function(){ 
 gulp.src('src/js/*.js')
     .pipe(jsmin())
     .pipe(concat('all.js'))
     .pipe(gulp.dest('dist/js'));
}); 

gulp.task('imgmin', function(){ 
 gulp.src('src/img/*')
    .pipe(imgmin())
    .pipe(gulp.dest('dist/img'));
});


 gulp.task('default', ['cssmin','jsmin','imgmin']);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市均蜜,隨后出現(xiàn)的幾起案子李剖,更是在濱河造成了極大的恐慌,老刑警劉巖囤耳,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件篙顺,死亡現(xiàn)場離奇詭異偶芍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)德玫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門匪蟀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宰僧,你說我怎么就攤上這事材彪。” “怎么了琴儿?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵段化,是天一觀的道長。 經(jīng)常有香客問我造成,道長显熏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任晒屎,我火速辦了婚禮喘蟆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鼓鲁。我一直安慰自己蕴轨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布骇吭。 她就那樣靜靜地躺著尺棋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绵跷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天成福,我揣著相機(jī)與錄音碾局,去河邊找鬼。 笑死奴艾,一個(gè)胖子當(dāng)著我的面吹牛净当,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蕴潦,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼像啼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了潭苞?” 一聲冷哼從身側(cè)響起忽冻,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎此疹,沒想到半個(gè)月后僧诚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體遮婶,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年湖笨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旗扑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡慈省,死狀恐怖臀防,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情边败,我是刑警寧澤袱衷,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站放闺,受9級特大地震影響祟昭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜怖侦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一篡悟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧匾寝,春花似錦搬葬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至猜年,卻和暖如春抡锈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乔外。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工床三, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人杨幼。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓撇簿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親差购。 傳聞我的和親對象是個(gè)殘疾皇子四瘫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

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