题目1: 如何全局安装一个 node 应用?
npm install -g [name]
题目2: package.json 有什么作用?
package.json记录了NPM包的所有相关信息,包括作者、简介、包依赖、构建等信息,格式是严格的JSON格式
其主要内容有:
- name: 包名称
- version:版本号
- main:主文件入口
- bin:果你的包里包含可执行文件,通过设置这个字段可以将它们包含到系统的PATH中,这样直接就可以运行,很方便。
- description:包的描述
- licence:包的开源协议
- dependencies:包的依赖列表
- devDependencies:包开发者使用的依赖列表
- author:作者名称
- repository:代码存放地址
- scripts:scripts属性是一个对象,里边指定了项目的生命周期个各个环节需要执行的命令。key是生命周期中的事件,value是要执行的命令。
题目3: npm install --save app 与 npm install --save-dev app有什么区别?
npm install -save app 是将app安装后放入当前包的依赖dependencies中, npm install --save-dev app是将app安装后放入开发者依赖中,他人使用时不会下载这些依赖。
题目4: node_modules的查找路径是怎样的?
先在包内node_modules查找若找不到就去上一级的目录查找,若还找不到继续向上查找,直到查找到根目录为止
题目5: npm3与 npm2相比有什么改进?yarn和 npm 相比有什么优势? (选做题目)
-
npm3与 npm2相比有什么改进?
npm是node.js的包依赖管理工具,不过有时时侯项目依赖过多,造成路径过深,超过了操作系统的文件深度限制。NPM3对此做了很大改进。简单的来说将传统的嵌套结构改为了平铺结构 比如,有一个模块A,依赖 B. 1
现在有个应用依赖A,运行npm install
npm3会将模块B放置到与A同级目录下 而npm2会将B放置到A的依赖模块目录下
如果有另外一个模块C,它依赖了一个不同版本的依赖模块B
在npm3中,不同版本的模块B会放置到C的依赖模块下
在终端中看到的目录结构是这个样子的 yarn和 npm 相比有什么优势
- 速度快:yarn 缓存了每次你下载的模块,所以同样模块同样的版本不会发送第二次下载请求,对于没有缓存的模块, yarn 也可以通过并行的网络请求最大限度利用网络资源。
- 安全:yarn 在开始安装一个包之前会先用 checksums 来验证,你不用担心本地的缓存的包被破坏了导致安装失败。
- 清晰的输出:npm 默认情况下非常冗余,例如使用 npm install 时它会递归列出所有安装的信息;而 Yarn 则一点也不冗余,当可以使用其它命令时,它适当的使用 emojis 表情来减少信息(Windows 除外)。
题目6: webpack是什么?和其他同类型工具比有什么优势?
WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其转换和打包为合适的格式供浏览器使用。
Gulp/Grunt是一种能够优化前端的开发流程的工具,而WebPack是一种模块化的解决方案,不过Webpack的优点使得Webpack在很多场景下可以替代Gulp/Grunt类的工具。
Grunt和Gulp的工作方式是:在一个配置文件中,指明对某些文件进行类似编译,组合,压缩等任务的具体步骤,工具之后可以自动替你完成这些任务。
Grunt和Gulp的工作流程
Webpack的工作方式是:把你的项目当做一个整体,通过一个给定的主文件(如:index.js),Webpack将从这个文件开始找到你的项目的所有依赖文件,使用loaders处理它们,最后打包为一个(或多个)浏览器可识别的JavaScript文件。
如果实在要把二者进行比较,Webpack的处理速度更快更直接,能打包更多不同类型的文件。
题目7:npm script是什么?如何使用?
npm 允许在package.json文件里面,使用scripts字段定义脚本命令。
{
// ...
"scripts": {
"build": "node build.js"
}
}
上面代码是package.json文件的一个片段,里面的scripts字段是一个对象。它的每一个属性,对应一段脚本。比如,build命令对应的脚本是node build.js。
命令行下使用npm run命令,就可以执行这段脚本。
$ npm run build
# 等同于执行
$ node build.js
这些定义在package.json里面的脚本,就称为 npm 脚本。
题目8: 使用 webpack 替换 入门-任务15中模块化使用的 requriejs
题目9:gulp是什么?使用 gulp 实现图片压缩、CSS 压缩合并、JS 压缩合并
Gulp就是为了规范前端开发流程,实现前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等功能的一个前端自动化构建工具。说的形象点,“Gulp就像是一个产品的流水线,整个产品从无到有,都要受流水线的控制,在流水线上我们可以对产品进行管理。”
var gulp = require('gulp')
var imagemin = require('gulp-imagemin')
var minifyCSS = require('gulp-minify-css')
var uglify = require('gulp-uglify')
var concat = require('gulp-concat')
var clean = require('gulp-clean')
gulp.task('images', function () {
gulp.src('dist/img/*').pipe(clean())//清空文件夹
return gulp.src('src/img/*.*') // 获取图片
.pipe(imagemin({ // 压缩图片
progressive: true
}))
.pipe(gulp.dest('dist/img')) //输出图片
})
gulp.task('css', function () {
gulp.src('dist/css/*').pipe(clean())
return gulp.src('src/css/*.css')
.pipe(minifyCSS()) // 压缩css
.pipe(concat('bundle.css')) // 合并css
.pipe(gulp.dest('dist/css'))
})
gulp.task('js', function () {
gulp.src('dist/js/*').pipe(clean())
return gulp.src('src/js/*.js')
.pipe(uglify()) // 压缩js
.pipe(concat('main.js'))
.pipe(gulp.dest('dist/js'))
})
gulp.task('default',['images','auto','js','css'])