高級5-npm使用、npmscript打造前端工作流军俊、webpack使用侥加、開發(fā)node應(yīng)用

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

全局安裝:package會被下載到特定的系統(tǒng)目錄下,安裝的package能夠在所有目錄下使用
npm install -g <package>
例如:
npm install -g jshint
優(yōu)點:無論哪個目錄都可以正常使用軟件包粪躬。如果被墻建議打開科學上網(wǎng)工具担败,或者先安裝npm install -g cnpm --
本地安裝: package會被下載當前所在目錄,只能在當前目錄下使用
npm install <package>
例如:
npm install jshint
缺點:只能在對應(yīng)安裝目錄下使用镰官,如果其他目錄想使用這個軟件包那其他目錄也要執(zhí)行npm install jshint此命令提前。

附加部分:查看npm版本輸入 npm -v
更新npm輸入sudo npm install npm -g

2: package.json 有什么作用?

如果想發(fā)一個包泳唠,必須要發(fā)package.json狈网,該文件夾告訴npm你這個包當前的版本及其他的相關(guān)信息,例如包的名字(別人搜索包時候的名字)笨腥,在每一次重新發(fā)布時候版本號必須更新拓哺,main指當前入口,便于他人引用入口脖母。
例如:


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

npm install --save app 自動把模塊和版本號添加到dependencies部分
npm install --save-dev app 自動把模塊和版本號添加到devdependencies部分

devdependencies是開發(fā)時依賴士鸥,比如你模塊用了marked測試框架,那么你的模塊的開發(fā)就依賴 marked镶奉,如果別人想為你的模塊貢獻代碼础淤,他就需要安裝marked崭放。但是只是使用你的模塊的人沽损,就不需要安裝marked揭厚。

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

先再本身文件夾查找是否有node_odules文件夾,找不到再到上一級琉挖,找到便停止玻侥。找不到便繼續(xù)往上一級查找直到根目錄决摧。

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

npm3與 npm2對比:
npm2安裝所有的dependencies都是嵌套的方式凑兰,是樹形結(jié)構(gòu)掌桩。
npm3以平坦的方式安裝dependencies,將dependencies安裝在同一目錄中姑食,解決了npm2帶來的冗長浪費空間的安裝方式
兩者主要的不同是:
不再區(qū)分dependencies的主次波岛。
改變了node_modules文件的結(jié)構(gòu)
例:
此時模塊A依賴B模塊


現(xiàn)某應(yīng)用依賴模塊A。執(zhí)行npm install
npm3 將模塊A和依賴的模塊B平鋪放入node_modules文件中
npm2是嵌套的模式放入

假設(shè)我們還需要依賴模塊C音半,但是模塊C依賴是高版本的B模塊

然而B v1.0已經(jīng)作為頂層依賴则拷,我們無法將B v2.0作為頂層依賴,npm3將會默認npm2的嵌套型結(jié)構(gòu)曹鸠,不同的是將會把B v2.0模塊放在所依賴它的C模塊下面

在終端我們會看到如下文件結(jié)構(gòu)

依賴關(guān)系列表和它們之間的關(guān)系可以使用npm ls

查看首要依賴可以使用npm ls --depth=0

yarn優(yōu)點(來自官網(wǎng)介紹):
1.緩存下載的每個軟件包煌茬,因此它永遠不需要再次下載它。它還將操作并行化以最大限度地利用資源彻桃,因此安裝時間比以往更快坛善。

2.其代碼執(zhí)行之前使用校驗和來驗證每個已安裝軟件包的完整性。

3.使用詳細而簡潔的lockfile文件和確定性的安裝算法邻眷,能夠保證在一個系統(tǒng)上的安裝眠屎,也可以在其他系統(tǒng)上以相同工作方式運行。

4.無論安裝順序如何耗溜,相同的依賴關(guān)系都將以相同的方式安裝在每臺機器上组力。

5.如果您之前安裝了一個軟件包,則可以在沒有任何互聯(lián)網(wǎng)連接的情況下重新安裝它抖拴。

6.從npm安裝任何軟件包,并保持軟件包工作流程相同腥椒。

7.單個請求失敗不會導致安裝失敗阿宅。請求在失敗時重試。

8.解析不匹配的依賴版本為一個單一的版本來避免導致多個版本笼蛛。

9.可以高效地隊列化請求洒放,使網(wǎng)絡(luò)利用率最大化

yarn和npm不同點:
1.同一個項目,安裝的時候無法保持一致性滨砍。由于package.json文件中版本號的特點往湿,下面三個版本號在安裝的時候代表不同的含義妖异。

"1.0.3",//安裝指定的1.0.3版本
"~1.0.3",//1.0.X中最新版本
"^1.0.3"http://安裝1.X.X中最新版本

在協(xié)同完成項目時由于依賴模塊版本的不同會導致bug。

yarn的解決辦法
為了保證包版本的錯誤匹配领追,精確版本號會被yarn的lock文件記錄下來他膳。每次模塊的添加,Yarn會創(chuàng)建一個yarn.lock文件绒窑。這樣就可以保證另一個機器安裝的了完全相同的版本的包棕孙,并且同時在package.json里仍保存著一個充許的版本段。

在npm里shrinkwrap命令也會產(chǎn)生lock文件些膨,然后npm在讀取package.json之前會讀取那個文件蟀俊,跟Yarn讀取yarn.lock類似。不同點是Yarn總是會自動的更新yarn.lock文件订雾,而npm需要你自己去手動維護肢预。
yarn.lock 文檔

2.npm允許在包安裝的時候運行代碼,yarn不行

3.npm安裝包是順序執(zhí)行洼哎,yarn可以并行安裝

4.npm安裝依賴包是樹形結(jié)構(gòu)


yarn安裝包是這種字段

  • npm install命令可以從package.json文件里安裝依賴误甚,并且允許你添加新的包。

  • yarn install只能安裝在yarn.lock或者packag.json里的列出來的依賴谱净,以它們保存的順序窑邦。

5.yarn add [–dev]
跟 npm install 類似,yarn add 讓你添加并且安裝一個依賴壕探。如命令名所示冈钦,它會添加一個依賴并自動的保存相應(yīng)的包到package.json,跟npm的--save標記一樣李请。Yarn的--dev標記添加一個開發(fā)依賴瞧筛,就象npm的--save-dev標記一樣。

yarn add [package]
npm install [package]

6.yarn upgrade
這個命令將包升級到package.json規(guī)則指定的版本范圍的最新版导盅,而不是yarn.lock所定義的完全一致的版本较幌。想要在npm達成一致的效果,你需要運行下面的命令:

rm -rf node_modules
npm install

這個命令不要跟npm update混淆了白翻,npm update會升級所有的包到最新的版本乍炉。
yarn upgrade [package]

ps:如果安裝包實在很慢時還是使用yarn安裝會快一些

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

一款模塊加載器兼打包工具岛琼,有半個前端工作流功能,也是可以將模塊打包到一起巢株,能把各種資源JS/CSS/圖片等都作為模塊來使用和處理槐瑞。

優(yōu)勢如下:
1.是以 commonJS 的形式來書寫腳本,但對 AMD/CMD 的支持也很全面阁苞,方便舊項目進行代碼遷移困檩。

2.可以將代碼拆分成多個區(qū)塊祠挫,每個區(qū)塊包含一個或多個模塊,它們可以按需異步加載悼沿,極大地減少了頁面初次加載時間等舔。

  1. 本身只能處理原生的 JS 模塊,但是 loader 轉(zhuǎn)換器可以將各種類型的資源轉(zhuǎn)換成 JS 模塊显沈。這樣软瞎,任何資源都可以成為 webpack 可以處理的模塊。

  2. 有智能解析器拉讯,幾乎可以處理任何第三方庫涤浇,無論它們的模塊形式是 CommonJS、 AMD 還是普通的 JS 文件魔慷。

  3. 有功能豐富的插件系統(tǒng)只锭。大多數(shù)內(nèi)容功能都是基于這個插件系統(tǒng)運行的,還可以開發(fā)和使用開源的 webpack 插件院尔,來滿足各式各樣的需求蜻展。

6.使用異步 I/O 和多級緩存提高運行效率,使得它能夠快速增量編譯邀摆。

7:npm script是什么纵顾?如何使用?

npm 允許在package.json文件里面栋盹,使用scripts字段定義腳本命令施逾。

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

使用npm run命令可以執(zhí)行腳本

npm run build
# 等同于執(zhí)行
node build.js

這些定義在package.json里面的腳本,就稱為 npm 腳本例获。
查看當前項目的所有 npm 腳本命令汉额,可以使用不帶任何參數(shù)的npm run命令:
npm run

npm默認的腳本值有

"start": "node server.js":
#執(zhí)行使用npm start
"install": "node-gyp rebuild":
#執(zhí)行使用npm install

"test": "echo \"文字"
#執(zhí)行使用npm test

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

代碼地址
webpack封裝預(yù)覽地址

該鏈接建議使用chrome瀏覽器打開會快一些,接口也可以順利加載
如果新聞部分未顯示建議您點擊chrome瀏覽器右上方的加載不安全腳本按鈕

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

gulp:

  • 是一款nodejs應(yīng)用
  • 打造前端工作流的利器收壕,打包妓灌、壓縮、合并啼器、git旬渠、遠程操作...
  • 簡單易用,通過最少的 API端壳,掌握 Gulp 毫不費力,構(gòu)建工作盡在掌握:如同一系列流管道枪蘑。
  • 利用 Node.js 流的威力损谦,你可以快速構(gòu)建項目并減少頻繁的 IO 操作岖免。
  • 插件質(zhì)量高
  • 通過代碼優(yōu)于配置的策略,Gulp 讓簡單的任務(wù)簡單照捡,復雜的任務(wù)可管理颅湘。
var gulp = require('gulp'),
    imagemin = require('gulp-imagemin');

var clean = require('gulp-clean'),
    cssnano = require('gulp-cssnano'),
    concat = require('gulp-concat'),
    autoprefixer = require('gulp-autoprefixer');

var uglify = require('gulp-uglify')

圖片壓縮

gulp.task('dist:imgs', function(){
    gulp.src('src/imgs/*')
    .pipe(imagemin())//壓縮圖片
    .pipe(gulp.dest('dist/imgs'))//所有圖片輸出到dist文件中的imgs文件夾內(nèi)
}) 

css壓縮合并

gulp.task('dist:css', function(){
    gulp.src('dist/css/*').pipe(clean());//dist中css文件清空
    return gulp.src('src/**/*.less')//再將src中以less為結(jié)尾的文件拷貝過去
    .pipe(less())//將less文件轉(zhuǎn)為css
    .pipe(cssnano())//壓縮css文件
    .pipe(concat('merge.css'))//將所有css文件集成一個名為merge.css文件
    .pipe(autoprefixer({//自動添加一個前綴,看需求寫
        browsers:['last 2 versions'],
        cascade: false
    }))
    .pipe(gulp.dest('dist/css'))//merge.css被傳入到dist/css文件夾中
})

js壓縮合并

gulp.task('dist:js', function(){
    gulp.src('dist/js/*').pipe(clean());//dist中js文件清空
    return gulp.src('src/**/*.js')//再將src中以js為結(jié)尾的文件拷貝過去
    .pipe(uglify())//壓縮js
    .pipe(concat('merge.js'))//將所有jd文件集成一個名為merge.js文件
    .pipe(gulp.dest('dist/js'))//merge.js被傳入到dist/js文件夾中
}) 
//git bash簡單方法調(diào)用
gulp.task('bulid', ['dist:imgs','dist:css','dist:js'])
//在git bash中輸入gulp build就可調(diào)用以上三個任務(wù)

10: 開發(fā)一個 node 命令行天氣應(yīng)用用于查詢用戶當前所在城市的天氣栗精,發(fā)布到 npm 上去闯参。可以通過如下方式安裝使用(可使用api.jirengu.com里提供的查詢天氣接口) (選做題目)

npm install hunger-weather -g
weather

包下載地址

安裝后的效果如下:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悲立,一起剝皮案震驚了整個濱河市鹿寨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌薪夕,老刑警劉巖脚草,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異原献,居然都是意外死亡馏慨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門姑隅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來写隶,“玉大人,你說我怎么就攤上這事讲仰∧脚浚” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵叮盘,是天一觀的道長秩贰。 經(jīng)常有香客問我,道長柔吼,這世上最難降的妖魔是什么毒费? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮愈魏,結(jié)果婚禮上觅玻,老公的妹妹穿的比我還像新娘。我一直安慰自己培漏,他們只是感情好溪厘,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著牌柄,像睡著了一般畸悬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上珊佣,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天蹋宦,我揣著相機與錄音披粟,去河邊找鬼。 笑死冷冗,一個胖子當著我的面吹牛守屉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蒿辙,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼拇泛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了思灌?” 一聲冷哼從身側(cè)響起俺叭,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎习瑰,沒想到半個月后绪颖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡甜奄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年柠横,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片课兄。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡牍氛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出烟阐,到底是詐尸還是另有隱情搬俊,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布蜒茄,位于F島的核電站唉擂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏檀葛。R本人自食惡果不足惜玩祟,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屿聋。 院中可真熱鬧空扎,春花似錦、人聲如沸润讥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽楚殿。三九已至撮慨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背甫煞。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工菇曲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冠绢,地道東北人抚吠。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像弟胀,于是被迫代替她去往敵國和親楷力。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

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