npm-npmscript-gulp-webpack

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

npm install -g packageName

2. package.json 有什么作用?

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

  • name:项目名称
  • version:项目版本
  • description:描述内容
  • main:主程序入口
  • scripts:命令行工具,打造前端自动化流程
  • dependencies:指定了项目运行所依赖的模块
  • devDependencies:项目开发所需要的模块
  • keywords:可选字段,字符串数组。npm search的时候会用到。
  • bin:可选字段。很多的包都会有执行文件需要安装到PATH中去。所有node_modules/.bin/目录下的命令,都可以用npm run [命令]的格式运行。在命令行下,键入npm run,然后按tab键,就会显示所有可以使用的命令。

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

  • npm install --save apppackage.json中创建
"dependencies  ": {
    "app": "xxx",
}

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

  • npm install --save-dev apppackage.json中创建
"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 - 通常只有一个,由浏览器加载。

优势:
  • webpack可以将代码拆分成多个区块,每个区块包含一个或多个模块,它们可以按需异步加载,极大地减少了页面初次加载时间。
  • webpack的核心是 一切皆模块的思想
    任何模块,CSS,图片,字体,都被webpack当做模块来处理,我们只需要在需要这些模块的时候来require,这样,开发的时候,逻辑就很清晰。开发人员就可以让文件分割的彻底,变成一个个的块。只要配置好webpack,就可以实现按需要来加载这些块。
  • Loader
    Webpack 本身只能处理原生的 JavaScript模块,但是 loader 转换器可以将各种类型的资源转换成 javascript模块。这样,任何资源都可以成为 Webpack 可以处理的模块。
  • 智能解析
    Webpack 有一个智能解析器,几乎可以处理任何第三方库,无论它们的模块形式是 CommonJS、 AMD 还是普通的 js文件。甚至在加载依赖的时候,允许使用动态表达式 require("./templates/" + name + ".jade")。
  • 插件系统
    Webpack 还有一个功能丰富的插件系统。大多数内容功能都是基于这个插件系统运行的,还可以开发和使用开源的 Webpack 插件,来满足各式各样的需求。
  • 快速运行
    Webpack 使用异步 I/O 和多级缓存提高运行效率,这使得 Webpack 能够以令人难以置信的速度快速增量编译。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容