npm-npmscript-gulp-webpack

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

  • npm install -g xx

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

  • package.json文件描述了一個NPM包,包括作者、簡介、包的依賴、構(gòu)建等所有信息。
  • 通常在創(chuàng)建NPM包時,可以在命令行輸入nmp init命令自動生成一個package.json文件,里面包含了一些常用的字段。還可以根據(jù)實際需求來自行完善或創(chuàng)建package.json文件。
  • package.json
    文件包含的常用配置字段:
  • name
    name和version是package.json中最重要的兩個字段,也是發(fā)布到NPM平臺上的唯一標(biāo)識,如果沒有正確設(shè)置這兩個字段,包就不能發(fā)布和被下載。
  • version
    這個字段的取值需要符合node-semver的規(guī)則,詳細(xì)可以見其文檔。
  • description
    包的描述信息,將會在npm search的返回結(jié)果中顯示,以幫助用戶了解包的用途。
  • author
    包的作者,可以是字符串或?qū)ο蟆?/li>
  • files
    包所包含的所有文件,可以取值為文件夾。還可以用.npmignore來去除不想包含到包里的文件。
  • main
    包的入口文件,如index.js
  • repository
    包的github倉庫地址。
  • scripts
    通過設(shè)置這個可以使NPM調(diào)用一些命令腳本,封裝一些功能。
  • config
    添加一些設(shè)置,可以供scripts讀取用,同時這里的值也會被添加到系統(tǒng)的環(huán)境變量中。
  • dependencies
    指定依賴的其它包,這些依賴是指包發(fā)布后正常執(zhí)行時所需要的,如果是開發(fā)中依賴的包,可以在devDependencies設(shè)置。
{
    "name": "my_package",     //項目名稱
    "version": "1.0.0",  //項目版本號
    "main": "index.js", //入口文件
       // bin參數(shù)是{ 命令名:文件名 }的格式,指定了各個內(nèi)部命令對應(yīng)的可執(zhí)行文件的位置,相當(dāng)于在user.local/bin下創(chuàng)建一個快捷方式
      // 執(zhí)行`server`,`mock`或`server-mock`命令時,將運(yùn)行對應(yīng)文件(./bin/server)
      // ./bin/server文件頭部需添加 #!/usr/bin/env node, 表示將以node運(yùn)行這個文件
    "bin":{    
        "server":"./bin/server",
        "mock":"./bin/mock",
        "server-mock":"./bin/server-mock"
    },
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",    //一般默認(rèn)一個test的空文件夾、用作寫測試代碼,`npm test`即可運(yùn)行。
        "make":"echo 'hello world!' "  //自定義的命令名需加run才能與運(yùn)行,`npm run make`
    },
    "keywords": [],  //項目的關(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": {   // 正式使用時依賴的包, npm install --save xxx 生成
        "my_dep": "^1.0.0"
    },
    "devDependencies" : {//開發(fā)或者測試時,依賴的包。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"  //項目主頁、 發(fā)布才有用
}

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

  • npm install --save app
    指項目正常運(yùn)行所依賴的包,沒有這個依賴,項目會出錯。
  • npm install --save-dev app
    指項目開發(fā)測試過程中所用的工具。

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

比如需要查找的依賴包叫“easytpl”,它會先在當(dāng)前目錄下查找node_module, 看有沒有easytpl文件夾(即easytpl包),如果有的話,會讀取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安裝依賴的時候比較簡單直接,直接按照包的依賴的樹形結(jié)構(gòu)下載填充至本地目錄,缺陷在于太深的目錄樹結(jié)構(gòu)會嚴(yán)重影響效率,甚至在window下可能會超出系統(tǒng)路徑限制的長度,另外有刪node_modules目錄經(jīng)歷的可能都漫長的等待。
針對 npm2 的問題,npm3 加了點(diǎn)算法,直白的解釋就是:npm install 時會按照 package.json 里依賴的順序依次解析,遇到新的包就把它放在第一級目錄,后面如果遇到一級目錄已經(jīng)存在的包,會先判斷版本,如果版本一樣則忽略,否則會按照 npm2 的方式依次掛在依賴包目錄下


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


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

  • webpack是一個module bundler(模塊打包工具),所謂的模塊就是在平時的前端開發(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,實現(xiàn)按需加載,降低了初始化時間;
  6. 支持 SourceUrls 和 SourceMaps,易于調(diào)試;
  7. 具有強(qiáng)大的Plugin接口,大多是內(nèi)部插件,使用起來比較靈活;
  8. webpack 使用異步 IO 并具有多級緩存。這使得 webpack 很快且在增量編譯上更加快;

題目7:npm script是什么?如何使用?

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

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

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

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


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

代碼


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

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

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)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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