1: 如何全局安装一个 node 应用?
npm install xxx -g
g为global的缩写
2: package.json 有什么作用?
储存了一个nodejs应用的名字、版本、描述、作者、入口文件、脚本、版权等等信息,相当于应用的一个文档说明,是的项目构建更加容易,也更易于分享给其他人。(类似于种子文件一样,分享资源不需要全部拷贝给别人,只需要分享一个种子文件就行了)。常用参数有:
name:项目名称
version:版本(遵守“大版本.次要版本.小版本”的格式)
description:描述说明,有助于人们发现你的包,因为它列在npm搜索中
script: 定义模块包的使用方式
keywords:关键字,时一个字符串的数组,也有助于人们在npm搜索中发现你的包
homepage:主页,项目主页的地址
bugs:一个对象,包含url网址和邮箱,当使用者发现问题时,可以通过这两种方式提交问题
license:许可证版本
people field:author, contributors:人字段,作者,贡献者等
main:main字段指定了加载的入口文件,require('moduleName')就会加载这个文件。这个字段的默认值是模块根目录下面的index.js。
bin:指定了各个内部命令对应的可执行文件的位置
等等
3: npm install --save app 与 npm install --save-dev app有什么区别?
首先要区分dependencies和devDependencies。前者是项目开发环境必需的依赖,后者是方便于项目使用开发的工具如脚手架工具、测试工具等。
- 相同:都会在项目下的node_modules目录下下载app
- 不同:
在往package.json文件写依赖时
--save 会写在dependencies下
--save-dev 会写在devDependencies下
4: nodule_modules的查找路径是怎样的?
1、如果require的内容以./或者../开头的按照正常的查找路径
2、require内容不加./或者../查找的js文件。规则是从当前node_modules 文件夹加载,如果找到了就停止,如果没有就查找上层目录的node_modules文件夹,只要找到或者查到根路径为止。
5: npm3与 npm2相比有什么改进?yarn和 npm 相比有什么优势? (选做题目)
npm3在npm2简单直接安装依赖包(树形结构下载)的基础上加了些算法。它会按照package.json里的依赖顺序依次解析,遇到新的包就把它放在第一级目录,后面如果遇到一级目录已存在的包则先判断版本,版本一致则忽略,否则按照npm2的方式依次挂在依赖包目录下。
yarn是facebook为自己的sandbox形式的开发环境创造的包管理器,既然是sandbox,摒弃外部环境时,对于离线形式的包安装的支持就很重要,这也是它的最大特点: 对所有已经安装过的包进行cache缓存,下次安装这些包时直接从缓存里拉取,对比与npm对网络环境的依赖,yarn解决了这个痛点。
相对于npm的队列式安装(当一个包安装完毕后才会执行下一个),yarn支持Parallel Installation,速度更快。
yarn.lock: 这是一个版本锁,它记录了所有包的版本信息,也就是说,它保证了在任何一台设备上,你对于包的拉取安装都是严格遵循这个版本信息,从而保证不出现: But it works on my computer 这样烦人的问题。
clean: yarn支持清理命令,可以清理node-modules目录下的包文件,比如一些捆绑进入的广告以及不必要的文件。
网络恢复: 一个单独的请求并不会导致整个安装失败,这些请求可以重试直到请求恢复正常。
6: webpack是什么?和其他同类型工具比有什么优势?
Webpack 是当下最热门的前端资源模块化管理和打包工具。它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步加载。通过 loader 的转换,任何形式的资源都可以视作模块,比如 CommonJs 模块、 AMD 模块、 ES6 模块、CSS、图片、 JSON、Coffeescript、 LESS 等。
优势:
- 对 CommonJS 、 AMD 、ES6的语法做了兼容
- 对js、css、图片等资源文件都支持打包
- 串联式模块加载器以及插件机制,让其具有更好的灵活性和扩展性,例如提供对CoffeeScript、ES6的支持
- 有独立的配置文件webpack.config.js
- 可以将代码切割成不同的chunk,实现按需加载,降低了初始化时间
- 支持 SourceUrls 和 SourceMaps,易于调试
- 具有强大的Plugin接口,大多是内部插件,使用起来比较灵活
- webpack 使用异步 IO 并具有多级缓存。这使得 webpack 很快且在增量编译上更加快
7:npm script是什么?如何使用?
npm script 是 package.json 中的一个属性
可以在这个属性中自定义 npm 命令,输入这个命令就会执行指定的操作
{
...
"scripts": {
"build": "npm install xxx"
}
...
}
运行npm run build就相当于执行命令npm install xxx
8: 使用 webpack 替换 入门-任务15中模块化使用的 requriejs
9:gulp是什么?使用 gulp 实现图片压缩、CSS 压缩合并、JS 压缩合并
1. 安装压缩插件
安装图像压缩插件
npm install gulp-imagemin --save-dev
安装文件合并插件
npm install gulp-concat --save-dev
安装css压缩插件
npm install gulp-cssnano --save-dev
安装js规范检查插件
npm install jshint gulp-jshint --save-dev
安装js压缩插件
npm install uglify --save-dev
2. 载入插件
var gulp = require('gulp');
var cssnano = require('gulp-cssnano');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify'); // js压缩
var imagemin = require('gulp-imagemin'); // image压缩
var jshint = require('gulp-jshint'); // js代码规范性检查
3. 定义任务
定义css合并压缩任务
gulp.task('build:css', function() {
gulp.src('./src/css/*.css')
.pipe(concat('index-merge.css'))
.pipe(cssnano())
.pipe(gulp.dest('dist/css/')); //
})
定义js合并压缩任务
gulp.task('build:js', function() {
gulp.src('src/js/*.js')
.pipe(jshint())
.pipe(jshint.reporter('default'))
.pipe(concat('merge.js'))
.pipe(uglify())
.pipe(gulp.dest('dist/js/'));
})
定义图片压缩任务
gulp.task('build:image', function() {
gulp.src('src/imgs/*')
.pipe(imagemin())
.pipe(gulp.dest('dist/imgs'));
})
gulp.task('build', ['build:css', 'build:js', 'build:image']);
4. 执行任务
在命令行中执行命令:
gulp build
10: 开发一个 node 命令行天气应用用于查询用户当前所在城市的天气,发布到 npm 上去。可以通过如下方式安装使用(可使用api.jirengu.com里提供的查询天气接口) (选做题目)
已发布
package名为:query-weather