几个前端构建工具的用法整理

本文整理几个前端工具的用法:Rollup、Gulp 和 Browserify。

1. Rollup 的使用

特性

  1. 下一代 JavaScript 打包工具
  2. Tree Shaking

安装

  1. 全局安装
npm install rollup -g
yarn global add rollup
  1. 在项目中安装
npm install rollup -D
yarn add rollup -D

指定打包的规范

Rollup 支持以下模块化规范:

  • AMD
  • CommonJS
  • ES6 Modules
  • IIFE
  • UMD

通过 -f 指令可以指定打包的规范,-f 指令是 --output.format 的缩写。

rollup main.js -f amd|cjs|es|iife|umd

配置文件

在命令行指定参数太麻烦,因此可以写在一个配置文件中。通过 -c 或者 --config 指令可以指定配置文件,默认使用 rollup.config.js 作为配置文件。
Rollup 在打包时会自行处理配置文件,因此在 rollup.config.js 中可以使用 export default 导出配置项。
使用 rollup -c 可以进行打包。

其他特性

Rollup 还有其他的一些特性,譬如插件机制,以及更详细的 API 使用,这方面的内容可以到 Rollup 的官网或者中文文档去查看。

常用用途

Rollup 打包后的代码更为纯粹,没有太多多余的东西,因此我常将 Rollup 用于 Node 代码中,其 Tree Shaking 特性可以帮助我们去除很多冗余代码,一般和 Gulp 和 Babel 结合使用。

2. Gulp 的使用

特性

  1. 基于 Task(任务)工作
  2. 插件丰富、配置方便

安装

  1. 全局安装
npm install gulp -g
yarn global add gulp
  1. 在项目中安装
npm install gulp -D
yarn add gulp -D

注:使用 Gulp 时需要同时在全局和项目中安装。

配置文件

默认情况下,Gulp 使用 gulpfile.js 作为配置文件,因此需要新建一个。

gulp.task

Gulp 是基于 Task 的,我们需要在 gulpfile.js 中指定不同的 Task,以完成不同的工作。
Gulp 要求至少提供一个默认的 Task(default)。
下面是一个配置了默认 Task 的文件:

const gulp = require("gulp");
gulp.task("default",() => {
    gulp.src("src/**/*.js")
        .pipe(gulp.dest("build"))
})

指定排除文件

如果不想 Gulp 编译某些文件,可以进行排除:

const gulp = require("gulp");
gulp.task("default",() => {
    gulp.src(["src/**/*.js","!src/lib/*.js"])
        .pipe(gulp.dest("build"))
})

指定依赖任务

在使用 gulp.task 时,还可以指定依赖的任务,这些任务将会在当前任务开始之前执行。

const gulp = require("gulp");
gulp.task("default",["test1","test2"],() => {
    gulp.src("src/**/*.js")
        .pipe(gulp.dest("build"))
})

gulp.task("test1",()=>{
    console.log("test1")
})

gulp.task("test2",()=>{
    console.log("test2")
})

注:task1task2 属于异步任务,因此无法保证 task1 一定会在 task2 之前执行。要想某个任务在另一个任务之前执行,可以将另一个任务写在依赖任务中:

const gulp = require("gulp");
gulp.task("default",["test2"],() => {
    console.log("end")
})

gulp.task("test1",()=>{
    console.log("test1")
})

gulp.task("test2",["test1"],()=>{
    console.log("test2")
})

gulp.watch

使用 gulp.watch 可以监听文件的变化,当文件发生变化时,就可以自动执行任务。

const gulp = require("gulp");
const del = require("del");
// 清除构建目录
gulp.task("clean",() => {
    del(["build/**/*"]);
})

// 编译
gulp.task("compile",["clean"],()=>{
    gulp.src(["src/**/*.js","!src/lib/*.js"])
    .pipe(gulp.dest("build"))
})

// 监控文件变化
gulp.task("autoWatch",()=>{
    return gulp.watch(["src/**/*.js","!src/lib/*.js"],["compile"])
})

gulp.task("default",["autoWatch"])

上例中,我们对文件内容进行了监听,当文件内容发生变化时,就会再次执行编译。

3. Browserify 的使用

特性

可以将 Node 上的模块移植到浏览器上使用,或者说,可以将 CommonJS 规范的模块转换成浏览器认识的模块。

安装

  1. 全局安装
npm install browserify -g
yarn global add browserify
  1. 在项目中安装
npm install browserify -D
yarn add browserify -D

使用

  1. 使用 Browserify 进行转换
browserify src/main.js -o build/bundle.js
  1. 浏览器模块化
browserify -r ./src/main.js:main -r ./src/test.js:custom-test > build/bundle.js

通过 文件名:模块名 指定导出的模块名。
然后可以在浏览器端通过 require 方法导入模块:

<script>
    const main = require("main")
    const test = require("custom-test")
    main()
    test()
</script>

通过 -r 参数,我们让浏览器具备了使用 require 方法导入模块的能力。

附:参考资料
Gulp 文档
附:Github 源码地址
https://github.com/charleylla/charley-learn-pack-tools

完。

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