題目1: 如何全局安裝一個(gè) node 應(yīng)用?
npm install -g XXX//即可全局安裝一個(gè)node應(yīng)用
題目2: package.json 有什么作用?
- 每個(gè)項(xiàng)目的根目錄下面,一般都有一個(gè)package.json文件,定義了這個(gè)項(xiàng)目所需要的各種模塊,以及項(xiàng)目的配置信息(比如名稱、版本、許可證等元數(shù)據(jù))。npm install命令根據(jù)這個(gè)配置文件,自動(dòng)下載所需的模塊,也就是配置項(xiàng)目所需的運(yùn)行和開發(fā)環(huán)境。
- scripts字段
scripts指定了運(yùn)行腳本命令的npm命令行縮寫,比如start指定了運(yùn)行npm run start時(shí),所要執(zhí)行的命令。
- dependencies字段,devDependencies字段
dependencies字段指定了項(xiàng)目運(yùn)行所依賴的模塊,devDependencies指定項(xiàng)目開發(fā)所需要的模塊。
- bin字段
bin項(xiàng)用來指定各個(gè)內(nèi)部命令對(duì)應(yīng)的可執(zhí)行文件的位置。
- main字段
main字段指定了加載的入口文件,require('moduleName')就會(huì)加載這個(gè)文件。這個(gè)字段的默認(rèn)值是模塊根目錄下面的index.js。
- config 字段
config字段用于添加命令行的環(huán)境變量。
- version字段
表示項(xiàng)目的版本好,默認(rèn)1.0.0
- author
表示項(xiàng)目的作者
{
"name": "Hello World",
"version": "0.0.1",
"author": "張三",
"description": "第一個(gè)node.js程序",
"keywords":["node.js","javascript"],
"repository": {
"type": "git",
"url": "https://path/to/url"
},
"license":"MIT",
"engines": {"node": "0.10.x"},
"bugs":{"url":"http://path/to/bug","email":"bug@example.com"},
"contributors":[{"name":"李四","email":"lisi@example.com"}],
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "latest",
"mongoose": "~3.8.3",
"handlebars-runtime": "~1.0.12",
"express3-handlebars": "~0.5.0",
"MD5": "~1.2.0"
},
"devDependencies": {
"bower": "~1.2.8",
"grunt": "~0.4.1",
"grunt-contrib-concat": "~0.3.0",
"grunt-contrib-jshint": "~0.7.2",
"grunt-contrib-uglify": "~0.2.7",
"grunt-contrib-clean": "~0.5.0",
"browserify": "2.36.1",
"grunt-browserify": "~1.3.0",
}
}
```
題目3: npm install --save app 與 npm install --save-dev app有什么區(qū)別?
- npm install --save app表示項(xiàng)目運(yùn)行時(shí)的依賴,其他用戶在安裝此應(yīng)用時(shí)會(huì)一起安裝。
- npm install --save-dev表示項(xiàng)目開發(fā)時(shí)的以來,其他用戶在安裝此應(yīng)用時(shí)不會(huì)一起安裝。
題目4: node_modules的查找路徑是怎樣的?
- node_module查找依賴的路線是:先從本地目錄下尋找,不存在就依次向上級(jí)目錄中查詢,直到系統(tǒng)根目錄。node全局安裝在系統(tǒng)根目錄下,所以全局安裝后可在所有目錄下使用。
題目5: npm3與 npm2相比有什么改進(jìn)?yarn和 npm 相比有什么優(yōu)勢? (選做題目)
- npm3與 npm2相比最重要就是把依賴管理的改變
- npm2的方式是層層嵌套的 。
安裝依賴的時(shí)候比較簡單直接,直接按照包依賴的樹形結(jié)構(gòu)下載填充本地目錄結(jié)構(gòu)。因?yàn)?npm 設(shè)計(jì)的初衷就是考慮到了包依賴的版本錯(cuò)綜復(fù)雜的關(guān)系,同一個(gè)包因?yàn)楸灰蕾嚨年P(guān)系原因會(huì)出現(xiàn)多個(gè)版本,簡單地填充結(jié)構(gòu)保證了無論是安裝還是刪除都會(huì)有統(tǒng)一的行為和結(jié)構(gòu)。
于是缺陷就凸顯出來了,太深的目錄樹結(jié)構(gòu)會(huì)嚴(yán)重影響效率,甚至在 Windows 下可能會(huì)超出系統(tǒng)路徑限制的長度。另外,在 Windows 有刪 node_modules 目錄經(jīng)歷的可能都經(jīng)歷過漫長的等待。
- npm3的方式是把最新的依賴放在同一層。
針對(duì) npm2 的問題,npm3 加了點(diǎn)算法,直白的解釋就是:npm install 時(shí)會(huì)按照 package.json 里依賴的順序依次解析,遇到新的包就把它放在第一級(jí)目錄,后面如果遇到一級(jí)目錄已經(jīng)存在的包,會(huì)先判斷版本,如果版本一樣則忽略,否則會(huì)按照 npm2 的方式依次掛在依賴包目錄下
- yarn和 npm 相比有什么優(yōu)勢
- 更快
yarn緩存了每個(gè)下載過的包,所以再次使用的時(shí)候無需重復(fù)下載。同時(shí)利用并行下載以最大化資源利用率,一次安裝速度更快。
- 更安全
在執(zhí)行代碼之前,yarn會(huì)通過算法校驗(yàn)每個(gè)安裝包的完整性。
- 更可靠
使用詳細(xì)和見解的鎖文件格式和明確的安裝算法,yarn能夠保證在不同系統(tǒng)下無差異的工作
題目6: webpack是什么?和其他同類型工具比有什么優(yōu)勢?
- webpack 是一個(gè)現(xiàn)代 JavaScript 應(yīng)用程序的模塊打包器(module bundler)。當(dāng) webpack 處理應(yīng)用程序時(shí),它會(huì)遞歸地構(gòu)建一個(gè)依賴關(guān)系圖(dependency graph),其中包含應(yīng)用程序需要的每個(gè)模塊,然后將所有這些模塊打包成一個(gè)或多個(gè) bundle。
- 在webpack開來一切皆模塊。包括你的js代碼,也包括css和fonts以及圖片等等,只要通過合適的loaders,他們都可以被當(dāng)做模塊處理。
- Webpack本身做能處理原聲的js模塊,但是loaders可以將各種類型的資源轉(zhuǎn)換成js模塊。這樣,任何資源都可以成為Webpack可以處理的模塊。
- 豐富的插件系統(tǒng)。大多數(shù)功能都是基于這個(gè)插件系統(tǒng)運(yùn)行的,還可以開發(fā)和使用開源的webpack插件,來滿足各式各樣的需求。
- 和requirejs相比較,requirejs的功能它都有,還能兼容AMD,ES6。webpack不需要寫define,自己exports后,require即可。
題目7:npm script是什么?如何使用?
- npm script允許在package.json中使用script字段定義腳本命令。通過設(shè)置npm script可以方便的實(shí)現(xiàn)前端工作流。例如:輸入命令npm run start,就會(huì)執(zhí)行index.js文件。輸入命令npm run begin,就會(huì)在命令行輸出'there it goes'
"scripts": {
"begin": "echo there it goes!",
"start": "node index.js",
}
題目8: 使用 webpack 替換 入門-任務(wù)15中模塊化使用的 requriejs
預(yù)覽
代碼
題目9:gulp是什么?使用 gulp 實(shí)現(xiàn)圖片壓縮、CSS 壓縮合并、JS 壓縮合并
- gulp是基于Nodejs的自動(dòng)任務(wù)運(yùn)行器, 她能自動(dòng)化地完成javascript/coffee/sass/less/html/image/css 等文件的的測試、檢查、合并、壓縮、格式化、瀏覽器自動(dòng)刷新、部署文件生成,并監(jiān)聽文件在改動(dòng)后重復(fù)指定的這些步驟
var gulp = require('gulp')
var clean = require('gulp-clean')//清空文件夾
var cssnano = require('gulp-cssnano')//css壓縮
var concat = require('gulp-concat')//合并文件
var uglify = require('gulp-uglify')//js壓縮
var imagemin = require('gulp-imagemin')//圖片壓縮
var babel = require('gulp-babel')
var notify = require('gulp-notify')
gulp.task('css', function () {
gulp.src('./dist/app.css')
.pipe(cssnano())
.pipe(gulp.dest('./gulp/css'))
.pipe(notify('CSS 編譯成功?。。。?))
})
gulp.task('js', function () {
gulp.src(['./dist/app.merge.js'])
.pipe(babel({
presets: ['es2015']
}))
.pipe(uglify())
.pipe(gulp.dest('./gulp/js'))
.pipe(notify('JS 編譯成功?。。?!'))
})
gulp.task('img', function () {
gulp.src('./src/image/*')
.pipe(imagemin())
.pipe(gulp.dest('./gulp/image'))
.pipe(notify('IMG 編譯成功!?。。?))
})
gulp.task('img1', function () {
gulp.src('./src/image/history/*')
.pipe(imagemin())
.pipe(gulp.dest('./gulp/image/history'))
.pipe(notify('IMG1 編譯成功?。。?!'))
})
gulp.task('img2', function () {
gulp.src('./src/image/more/*')
.pipe(imagemin())
.pipe(gulp.dest('./gulp/image/more'))
.pipe(notify('IMG2 編譯成功?。。?!'))
})
gulp.task('img3', function () {
gulp.src('./src/image/watches/*')
.pipe(imagemin())
.pipe(gulp.dest('./gulp/image/watches'))
.pipe(notify('IMG3 編譯成功!?。?!'))
})
gulp.task('clean', function () {
gulp.src(['./gulp/css/*.css', './gulp/image/*','./gulp/js/*.js'],{read: false})
.pipe(clean())
})
gulp.task('build', ['clean'],function() {
gulp.start('css','js','img','img1','img2','img3')
})
題目10: 開發(fā)一個(gè) node 命令行天氣應(yīng)用用于查詢用戶當(dāng)前所在城市的天氣,發(fā)布到 npm 上去??梢酝ㄟ^如下方式安裝使用(可使用api.jirengu.com里提供的查詢天氣接口) (選做題目)
$ npm install weather-search -g
weather //查詢本地天氣
weather beijing //查詢beijing天氣,最好使用漢字