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ū)塊包含一個或多個模塊,它們可以按需異步加載悼沿,極大地減少了頁面初次加載時間等舔。
本身只能處理原生的 JS 模塊,但是 loader 轉(zhuǎn)換器可以將各種類型的資源轉(zhuǎn)換成 JS 模塊显沈。這樣软瞎,任何資源都可以成為 webpack 可以處理的模塊。
有智能解析器拉讯,幾乎可以處理任何第三方庫涤浇,無論它們的模塊形式是 CommonJS、 AMD 還是普通的 JS 文件魔慷。
有功能豐富的插件系統(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
該鏈接建議使用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
安裝后的效果如下: