npm_自动化工作流_模块打包

题目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 相比有什么优势? (选做题目)

  1. npm3与 npm2相比有什么改进?
    npm是node.js的包依赖管理工具,不过有时时侯项目依赖过多,造成路径过深,超过了操作系统的文件深度限制。NPM3对此做了很大改进。简单的来说将传统的嵌套结构改为了平铺结构 比如,有一个模块A,依赖 B. 1
    现在有个应用依赖A,运行 npm install
    npm3会将模块B放置到与A同级目录下 而npm2会将B放置到A的依赖模块目录下


    如果有另外一个模块C,它依赖了一个不同版本的依赖模块B

    在npm3中,不同版本的模块B会放置到C的依赖模块下

    在终端中看到的目录结构是这个样子的

  2. 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的工作流程

Grunt和Gulp的工作流程

Webpack的工作方式是:把你的项目当做一个整体,通过一个给定的主文件(如:index.js),Webpack将从这个文件开始找到你的项目的所有依赖文件,使用loaders处理它们,最后打包为一个(或多个)浏览器可识别的JavaScript文件。

Webpack工作方式

如果实在要把二者进行比较,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

github

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

推荐阅读更多精彩内容

  • 题目1: 如何全局安装一个 node 应用? Node模块采用npm install命令安装。 每个模块可以“全局...
    萧雪圣阅读 1,732评论 0 1
  • 1: 如何全局安装一个 node 应用? 全局安装:package会被下载到到特定的系统目录下( /usr/loc...
    yuhuan121阅读 365评论 0 0
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,386评论 1 32
  • 1. 如何全局安装一个 node 应用? 在终端输入npm install -g pkg pkg为安装包的名字pk...
    _李祺阅读 201评论 0 1
  • 从小妈妈常包大包子和烙饼,最常用的馅就是韭菜+肉丁,南瓜馅,当然后来又有了全肉的!一吃包子基本没有菜,就个...
    黑白胶片阅读 486评论 4 3