npm-npmscript-gulp-webpack

2017-08-29  本文已影响0人  hui_mamba

1. 如何全局安装一个 node 应用?

npm install -g packageName

2. package.json 有什么作用?

执行npm init -y生成package.json文件,该文件对项目记录了一些配置信息,主要是用来进行包管理。包括name、version、description、author、private、scripts、dependencies、decDependencies等。

3. npm install --save app 与 npm install --save-dev app有什么区别?

"dependencies  ": {
    "app": "xxx",
}

发布之后,项目运行仍依赖这个模块,会被用户下载。

"devDependencies": {
    "app": "xxx",
}

开发时依赖于这个模块,项目正常运行时不需要这个模块,不会被用户所下载

4. node_modules的查找路径是怎样的?

require模块时,先在当前目录查找node_modules下的模块,如果没有,再往上一级目录中查询node_modules下的模块,层层递进,直到系统根目录。
比如某个模块的绝对路径是/home/user/foo.js,在该模块中使用require('bar')方式加载模块时,node将在下面的位置进行搜索:
/home/user/node_modules/bar
/home/node_modules/bar
/node_modules/bar

5. npm3与 npm2相比有什么改进?

npm2 安装依赖的时候比较简单直接,直接按照包依赖的树形结构下载填充本地目录结构。
因为 npm 设计的初衷就是考虑到了包依赖的版本错综复杂的关系,同一个包因为被依赖的关系原因会出现多个版本,简单地填充结构保证了无论是安装还是删除都会有统一的行为和结构。
比如一个 App 里模块 A 和 C 都依赖 B,无论被依赖的 B 是否是同一个版本,都会生成对应结构:
npm2缺点:太深的目录树结构会严重影响效率,甚至在 Windows 下可能会超出系统路径限制的长度。



npm3加了点算法,直白的解释就是:npm install 时会按照 package.json 里依赖的顺序依次解析,遇到新的包就把它放在第一级目录,后面如果遇到一级目录已经存在的包,会先判断版本,如果版本一样则忽略,否则会按照 npm2 的方式依次挂在依赖包目录下。
npm3优点:这种构建方式会几乎把所有包放在一级目录下,很大程度上提升了效率以及节省了部分磁盘空间。
npm2 和 npm3 生成的结构对比: 对比图

yarn和 npm 相比有什么优势?

  1. Yarn 有一个锁定文件 (lock file) 记录了被确切安装上的模块的版本号。每次只要新增了一个模块,Yarn 就会创建(或更新)yarn.lock 这个文件。这么做就保证了,每一次拉取同一个项目依赖时,使用的都是一样的模块版本,现在npm5.0在模块安装后,也会生成一个package-lock.json文件,也有类似的作用。
  2. Yarn在拉取包的时候,是采用了并行安装,所以相较于npm的列队安装的速度会快很多。

6. webpack是什么?和其他同类型工具比有什么优势?

webpack 是一个现代 JavaScript 应用程序的模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成少量的 bundle - 通常只有一个,由浏览器加载。

优势:

7. npm script是什么?如何使用?

npm script 是利用packge.json中 scripts 这个属性,制定一个工作流。
比如 ''test'':''mkdir abc'',我们就可以直接使用npm test在当前文件夹创建一个 mkdir abc;
(但是除了 test和start,设置的其他命令均需要 用npm run xxx来启用),对此,我们可以在命令行的使用上就可以简化很多。不用来敲很多代码,来执行一个命令,而是敲少量的代码,来执行一系列的事情。
npm script会将当前目录的node_modules/.bin子目录加入PATH变量,执行结束后,再将PATH变量恢复原样。这意味着,当前目录的node_modules/.bin子目录里面的所有脚本,都可以直接用脚本名调用,而不必加上路径。比如,当前项目的依赖里面有 Mocha,只要直接写mocha test就可以了。

8. 使用 webpack 替换 入门-任务15中模块化使用的 requriejs

代码
效果

9. gulp是什么?使用 gulp 实现图片压缩、CSS 压缩合并、JS 压缩合并。

gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器;它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;使用它,我们不仅可以很愉快的编写代码,而且大大提高我们的工作效率。
gulp是基于Nodejs的自动任务运行器, 她能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。在实现上,她借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,使得在操作上非常简单。

npm install gulp-imagemin --save-dev //图片压缩
npm install gulp-cssnano --save-dev  //css压缩
npm install uglify --save-dev        //js压缩
npm install gulp-jshint --save-dev   //js规范检查
npm install gulp-concat --save-dev   //文件合并
npm install gulp-rename --save-dev   //重命名
//gulpfile.js
//引入插件
const gulp = require('gulp');
const cssnano = require('gulp-cssnano');
const concat = require('gulp-concat');
const jshint = require('gulp-jshint');
const uglify = require('gulp-uglify');
const imagemin = require('gulp-imagemin');
const rename = require('gulp-rename');

//css合并压缩
gulp.task('build:css', function() {
  gulp.src('./src/css/*.css')
    .pipe(concat('merge.css'))
    .pipe(rename({
        suffix: '.min'
    }))
    .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(rename({
      suffix: '.min'
    }))
    .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']);

最后在命令行运行 gulp build

10. 开发一个 node 命令行天气应用用于查询用户当前所在城市的天气,发布到 npm 上去。

npm install mamba-weather -g
weather 北京

源码地址

1
1
1
1
1
1
1
1
1
1

上一篇 下一篇

猜你喜欢

热点阅读