模塊化工具npm-npmscript-gulp-webpack

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

全局安裝:package會被下載到到特定的系統(tǒng)目錄下( /usr/local/lib/cdnode_modules/)型酥,安裝的package能夠在所有目錄下使用。

cd 包名

2: package.json 有什么作用将宪?

//package.json

{
  "name": "plearner-demo0",//該node_module的名字
  "version": "1.0.0",//向npm發(fā)布時闯捎,該node_module的版本號
  "description": "this is a desrtiption of my test",// 對該模塊的描述
  "main": "text.js",//程序的入口文件,require該模塊時妖碉,該模塊從此文件開始執(zhí)行
  "scripts": {//執(zhí)行命令行忽肛,目的是便于打造自動化流程法严,比如說在build中寫可以壓縮的方法损敷。
//除了start和test執(zhí)行方式為npm start/test磺樱,其他均為 npm run XXX
    "test": "echo peng"
  },
  "keywords": [//在npm網(wǎng)站搜索時罪帖,通過搜索該關(guān)鍵字矢否,可以找到該模塊
    "test"
  ],
  "author": "plearner",//模塊的作者
  "license": "ISC",
  "dependencies": {//該模塊運行時需要依賴的其他模塊尝蠕,當其他人npm install該模塊時橄唬,也會把該模塊的依賴模塊一并安裝
    "marked": "^0.3.6"
  },
  "devDependencies": {//編寫該模塊時牲迫,采用的開發(fā)工具蚀狰,非必須手销,當其他人npm install該模塊時苫幢,不會安裝此開發(fā)依賴工具
    "easytpl": "^1.0.4"
  }
}

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

  • npm install --save app 和npm install --save-dev app 兩個都是在當前文件夾安裝app包访诱,并且都是這個包所依賴的其他包
  • --save 執(zhí)行時,會自動更新 packge.json中的dependencies 韩肝。而 --save-dev 會更新 devDependencies触菜, 開發(fā)依賴包。當我們發(fā)布包成功哀峻,別人下載時涡相,會自動下載 dependencies。而開發(fā)依賴的包剩蟀,不會被用戶下載催蝗。

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

當require一個模塊xxx時,會首先在當前目錄下尋找node_modules下的xxx育特,若沒有丙号,則返回到上一級目錄的node_modules下尋找xxx,最終會找到根目錄下node_modules下的xxx。

所以全局安裝到根目錄后才可以在任何文件目錄下使用命令犬缨。

5: npm3與 npm2相比有什么改進喳魏?yarn和 npm 相比有什么優(yōu)勢?

npm3對模塊依賴目錄的層次進行了改進

npm是node.js的包依賴管理工具,不過有的時候項目依賴過多怀薛,造成路徑過深刺彩,超過了操作系統(tǒng)的文件深度限制。
npm3將傳統(tǒng)的嵌套結(jié)構(gòu)改為平鋪結(jié)構(gòu)枝恋。
包以及包依賴的其他模塊將會以同一層級安裝在包使用者的node_modules下 迂苛,如果版本有沖突,才會采用npm2的嵌套方式安裝在各個包下鼓择。
npm3對模塊依賴目錄層次的改進

Yarn是一個新的Javascript包管理器

它由Facebook, Google, Exponent and Tilde開發(fā)者共同開發(fā)完成三幻。Yarn 不是 NPM 的fork版本,而是它的重新設(shè)計呐能,Yarn 定位為"快速念搬、可靠、安全的依賴管理工具"摆出,目標是解決團隊開發(fā)中使用 NPM 遇到的問題朗徊。

NPM 一些潛在的問題:

  • 嵌套依賴 (npm 3.0版本已修復)
  • 串行安裝
  • 單一個 package 來源(npmjs.com)
  • 需要網(wǎng)絡(luò)來安裝軟件包(盡管我們可以創(chuàng)建一個臨時緩存)
  • 允許程序包在安裝時運行代碼(不利于安全性)
  • 不確定的包狀態(tài)(不能確定項目的所有副本使用相同的包版本)

Yarn 解決方案:

  • 單依賴包結(jié)構(gòu): 可以使用單一版本的依賴包,安裝更快速偎漫,占用磁盤空間更少
  • 并行安裝: 并行下載依賴包爷恳,減少下載時間
  • 多個包來源: Yarn 讀取和安裝 npmjs.com 和 Bower安裝包,如果有個渠道down掉了象踊,可以從另一個渠道下載包并安裝
  • 自動重試: 單個網(wǎng)絡(luò)請求失敗不會導致安裝失敗温亲,請求在失敗后會重試,這解決了由于臨時網(wǎng)絡(luò)問題而產(chǎn)生的構(gòu)建異常
  • 兼容 NPM: 從 NPM 切換到 Yarn 不需要做特殊兼容處理
  • yarn.lock: 用來記錄項目使用每個 javascript 包的確切版本杯矩。當將此文件提交至 SVN栈虚、GIT 等代碼維護工具,可以保證項目的所有開發(fā)人員共享一套依賴包的版本號史隆。
    在package.json中魂务,依賴的包版本可以被指定為一個范圍,也可以不帶版本號泌射。這個可能會導致一種問題粘姜,團隊內(nèi)不同開發(fā)人員使用不同版本的軟件包。從包管理器(Bundler)中借鑒熔酷,Yarn 創(chuàng)建了 yarn.lock文件孤紧,用來記錄項目使用每個包的確切版本。

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

webpack 是一款模塊加載器兼打包工具留储,它能把各種資源 JS翼抠、CSS咙轩、圖片等都作為模塊來使用和處理。
webpack的核心是一切皆模塊的思想阴颖,所以活喊,任何模塊,CSS量愧,圖片钾菊,字體,都被webpack當做模塊來處理偎肃,我們只需要在需要這些模塊的時候來require煞烫。

webpack的優(yōu)勢一:Code Splitting代碼分割
過去,傳輸模塊時有兩個極端:

  • 1.一個請求獲取一個模塊
    (requirejs 每一個require的模塊累颂,對應的都是一條網(wǎng)絡(luò)請求)

    • 優(yōu)點:只傳送所需的模塊
    • 缺點:許多請求意味著很多開銷
    • 缺點:因為請求的延遲滞详,程序啟動緩慢
  • 2.一個請求獲取所有模塊
    (r.js 把所有的模塊都打包成一個網(wǎng)絡(luò)請求)

    • 優(yōu)點:請求開銷減少,延遲小
    • 缺點:暫時并不所需的模塊也被傳送

webpack將請求的模塊組拆分成許多小塊紊馏。
被復用的模塊組被一次請求最開始就獲取料饥,最初不需要的模塊的塊則可以按需加載。 擁有初始下載量小朱监,并在應用程序請求時按要求下載代碼的優(yōu)勢岸啡。

webpack的優(yōu)勢二:Loaders加載器
通過 loader 的轉(zhuǎn)換,任何形式的資源都可以視作模塊赫编,比如 CommonJs 模塊巡蘸、 AMD 模塊、 ES6 模塊擂送、CSS赡若、圖片、 JSON团甲、Coffeescript逾冬、 LESS 等。它可以取代gulp的壓縮圖片打包js等功能

webpack的優(yōu)勢三:Clever parsing解析
用 commonJS 來書寫躺苦,對 AMD/CMD 支持也很全面身腻。

webpack的優(yōu)勢四:插件系統(tǒng)
webpack具有豐富的插件系統(tǒng)。

7:npm script是什么匹厘?如何使用嘀趟?

npm script 是利用packge.json中 script 這個屬性,制定一個工作流愈诚。
簡化命令行的使用她按。

"scripts": { //執(zhí)行命令行牛隅,目的是便于打造自動化流程,比如說在build中寫可以壓縮的方法酌泰。除了start和test執(zhí)行方式為npm start/test媒佣,其他均為 npm run XXX
   "build": "echo build...",
   "start": "echo start...",
   "test": "echo \"Error: no test specified\" && exit 1"
 }

npm實例

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

展示效果
代碼

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

gulp是一款nodejs的插件,gulp能進行圖片壓縮衰琐,js打包實現(xiàn)前端工作流也糊,它還含有豐富的插件,是前端工作中一款簡單好用的利器羡宙。

glup安裝及使用

$npm install gulp-cli -g //全局安裝gulp,作為命令行工具是不能require到的
$npm install gulp -D //在當前項目的目錄下安裝gulp狸剃,才能require到,等于 npm install --save-dev gulp
$touch gulpfile.js  //新建gulpfile.js文件
$gulp --help

gulp是一個對象狗热,對象里有如下幾個方法
gulp.src | gulp.dest | gulp.task | gulp.watch
參見gulp文檔

gulp.src(globs[, options]):把哪些文件放入glup中處理钞馁,采用正則表達式的寫法,可以是字符串或者數(shù)組斗搞,通過gulp轉(zhuǎn)化成數(shù)據(jù)流
gulp.dest(path[, options]) 將數(shù)據(jù)流導出成文件
gulp.task(name [, deps] [, fn]) 創(chuàng)建任務指攒,一個任務可以認為是一個流水線 [, deps] 依賴是并行的
gulp.watch(glob [, opts], tasks) or gulp.watch(glob [, opts, cb]) 監(jiān)測文件內(nèi)容的改動

gulp運行

終端運行g(shù)ulp taskname
如果想要直接gulp就能運行,可以將原taskname改為default或者新建一個task僻焚,taskname為default

使用 gulp 實現(xiàn)圖片壓縮允悦、CSS 壓縮合并、JS 壓縮合并

#gulpfile.js文件中

var gulp = require('gulp');
//引入組件
var minifycss = require('gulp-minify-css'),//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(argument){

    gulp.src('src/css/*.css')
        .pipe(concat('merge.min.css'))
        .pipe(minifycss())
        .pipe(gulp.dest('dist/css/'));
});

gulp.task('js',function(argument){
    gulp.src('src/js/*.js')
        .pipe(jshint())
        .pipe(jshint.reporter('default'))

        .pipe(concat('merge.js'))
        .pipe(rename({
            suffix: '.min'
        }))
        .pipe(uglify())
        .pipe(gulp.dest('dist/js/'));
});

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

gulp.task('clear', function(){ //清空文件夾
    gulp.src('dist/*',{read: false})
        .pipe(clean());
});

gulp.task('build',['html','css','js','img']);//運行g(shù)ulp build的時候虑啤,相當于把html,css,js,img都運行了

10: 開發(fā)一個 node 命令行天氣應用用于查詢用戶當前所在城市的天氣隙弛,發(fā)布到 npm 上去。

npm上搜索hunger-yuhuan2-weather

demo4/index.js

#!/usr/bin/env node  //指明用node執(zhí)行
var axios = require('axios')
console.log(process.argv)   //process.argv獲取輸入的參數(shù)

var data = {}

if(process.argv[2]){
    data.params = {
        city: process.argv[2]
    }
}
axios.get('http://api.jirengu.com/weather.php', data)  //引用axios方法狞山,類似的方法還有request
  .then(function (response) {
    var weather = response.data.results[0].weather_data[0]
    console.log(weather.date)
    console.log(weather.temperature)
    console.log(weather.weather + ',' + weather.wind)
    console.log('PM25:' + response.data.results[0].pm25)
  })
  .catch(function (error) {
    console.log(error);
  })

demo4/package.json

{
  "name": "hunger-yuhuan2-weather",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "bin":{
    "weather-yuhuan": "./index.js"
  },
  "scripts": { //執(zhí)行命令行全闷,目的是便于打造自動化流程,比如說在build中寫可以壓縮的方法萍启。除了start和test執(zhí)行方式為npm start/test总珠,其他均為 npm run XXX
    "build": "echo build...",
    "start": "echo start...",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "yuhuan",
  "license": "ISC",
  "dependencies": {
    "axios": "^0.16.2"
  }
}

還需要引入依賴axios

npm install --save axios

最后登陸&發(fā)布包

npm login
npm publish

使用
在控制臺輸入weather-yuhuan顯示當前所在城市天氣
輸入weather-yuhuan XXX 顯示XXX城市天氣

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市勘纯,隨后出現(xiàn)的幾起案子局服,更是在濱河造成了極大的恐慌,老刑警劉巖驳遵,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淫奔,死亡現(xiàn)場離奇詭異,居然都是意外死亡堤结,警方通過查閱死者的電腦和手機唆迁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門鸭丛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人唐责,你說我怎么就攤上這事鳞溉。” “怎么了妒蔚?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵穿挨,是天一觀的道長月弛。 經(jīng)常有香客問我肴盏,道長,這世上最難降的妖魔是什么帽衙? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任菜皂,我火速辦了婚禮,結(jié)果婚禮上厉萝,老公的妹妹穿的比我還像新娘恍飘。我一直安慰自己,他們只是感情好谴垫,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布章母。 她就那樣靜靜地躺著,像睡著了一般翩剪。 火紅的嫁衣襯著肌膚如雪乳怎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天前弯,我揣著相機與錄音蚪缀,去河邊找鬼。 笑死恕出,一個胖子當著我的面吹牛询枚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浙巫,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼金蜀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了的畴?” 一聲冷哼從身側(cè)響起渊抄,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎苗傅,沒想到半個月后抒线,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡渣慕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年嘶炭,在試婚紗的時候發(fā)現(xiàn)自己被綠了抱慌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡眨猎,死狀恐怖抑进,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情睡陪,我是刑警寧澤寺渗,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站兰迫,受9級特大地震影響信殊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜汁果,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一涡拘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧据德,春花似錦鳄乏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至善玫,卻和暖如春水援,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蝌焚。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工裹唆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人只洒。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓许帐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親毕谴。 傳聞我的和親對象是個殘疾皇子成畦,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

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

  • 題目1: 如何全局安裝一個 node 應用? Node模塊采用npm install命令安裝。 每個模塊可以“全局...
    蕭雪圣閱讀 1,782評論 0 1
  • 在現(xiàn)在的前端開發(fā)中涝开,前后端分離循帐、模塊化開發(fā)、版本控制舀武、文件合并與壓縮拄养、mock數(shù)據(jù)等等一些原本后端的思想開始...
    Charlot閱讀 5,439評論 1 32
  • 1.如何全局安裝一個 node 應用? 打開你的命令行工具輸入npm install 'packages name...
    Rising_suns閱讀 343評論 0 0
  • 前言 眾所周知目前比較火的工具就是gulp和webpack,但webpack和gulp卻有所不同银舱,本人兩者的底層研...
    cduyzh閱讀 1,368評論 0 13
  • 瘪匿、將代碼模塊化之后跛梗,我們需要模塊加載器來管理這些模塊 **npm *解析node package managern...
    jrg_memo閱讀 683評論 0 0