一、gruntjs

1、介绍

  • 一句话:自动化。对于需要反复重复的任务,例如压缩(minification)、编译、单元测试、linting等,自动化工具可以减轻你的劳动,简化你的工作。当你在 Gruntfile 文件正确配置好了任务,任务运行器就会自动帮你或你的小组完成大部分无聊的工作。
  • gruntjs

    2、安装

  1. cnpm i grunt grunt-babel @babel/core @babel/preset-env -D

3、代码

  1. module.exports = function (grunt) {
  2. //1.加载 babel任务
  3. grunt.loadNpmTasks("grunt-babel");
  4. //初始化配置文件
  5. grunt.initConfig({
  6. babel: {
  7. options: {
  8. sourceMap: true,
  9. presets: ["@babel/preset-env"],
  10. },
  11. dist: {
  12. files: {
  13. "dist/app.js": "src/app.js",
  14. },
  15. },
  16. },
  17. });
  18. //default指的是入口任务
  19. grunt.registerTask("default", ["babel"]);
  20. };
  1. "scripts": {
  2. "build": "grunt"
  3. }


二、gulp

1、gulp

  • gulp 将开发流程中让人痛苦或耗时的任务自动化,从而减少你所浪费的时间、创造更大价值。
  1. cnpm install gulp-cli -g
  2. cnpm install gulp -D
  3. npx -p touch nodetouch gulpfile.js
  4. gulp --help
  1. cnpm install --save-dev gulp-cli gulp gulp-babel @babel/core @babel/preset-env

官网: https://www.gulpjs.com.cn/

2、gulp介绍

  • 基于nodejs的steam流打包
  • 定位是基于任务流的自动化构建工具
  • Gulp是通过task对整个开发过程进行构建

3、优点

  • 流式的写法简单直观
  • API简单,代码量小,写法简单优雅
  • 易于学习和使用
  • 适合多页面应用开发

4、缺点

  • 异常处理比较麻烦
  • 工作流顺序难以精细控制
  • 不太适合单页或者自定义模块的开发

5、写法

gulpfile.js 文件

  1. const gulp = require("gulp");
  2. const babel = require("gulp-babel");
  3. function defaultTask(callback) {
  4. gulp
  5. .src("src/app.js")//读取源文件
  6. .pipe(
  7. babel({//传给babel任务
  8. presets: ["@babel/preset-env"],
  9. })
  10. ).pipe(gulp.dest("dist"));//写到dist里
  11. callback();
  12. }
  13. exports.default = defaultTask;

三、rollup

官网: https://www.rollupjs.com/

1、介绍

Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序。
Rollup 对代码模块使用新的标准化格式,这些标准都包含在 JavaScript 的 ES6 版本中,而不是以前的特殊解决方案,如 CommonJS 和 AMD。ES6 模块可以使你自由、无缝地使用你最喜爱的 library 中那些最有用独立函数,而你的项目不必携带其他未使用的代码。ES6 模块最终还是要由浏览器原生实现,但当前 Rollup 可以使你提前体验。
https://www.rollupjs.com/guide/tools/#babel

2、特点

  • rollup 下一代ES6模块化工具,最大的亮点是利用ES6模块设计,利用tree-shaking生成更简洁、更简单的代码
  • 一般而言,对于应用用webpack,对于类库使用rollup
  • 需要代码拆分(Code Splitting), 或者很多静态资源需要处理,再或者构建的项目需要引入很多COmmonJS模块的依赖时,使用webpack
  • 代码库是基于ES6模块,而且需要代码能够被其他人直接使用,使用Rollup

3、优点

  • 用标准化的格式(es6)来写代码,通过减少四代码尽可能的缩小包体积
  • 构建速度相对快些

4、缺点

  • 对代码进行拆分、静态资源、CommonJS模块支持不好

5、编码

rollup.config.js

  1. import resolve from "rollup-plugin-node-resolve";
  2. import babel from "rollup-plugin-babel";
  3. export default {
  4. input: "src/main.js", //webpack entry
  5. output: {
  6. //webpack output
  7. file: "dist/bundle.js", //output filename
  8. format: "cjs",//common.js module.exports = ?
  9. exports: "default",
  10. },
  11. plugins: [
  12. resolve(),
  13. babel({//babel-loader
  14. presets: ["@babel/preset-env"],
  15. exclude: "node_modules/**", // 只编译我们的源代码
  16. }),
  17. ],
  18. };

package.json

  1. "scripts": {
  2. "build": "rollup -c ./rollup.config.js"
  3. }

四、Parcel

1.Parcel安装

  1. yarn global add parcel-bundler
  2. npm install -g parcel-bundler
  3. parcel -V

官网: https://parceljs.org/

1、介绍

  • Pacel是快速、零配置的Web应用程序打包器
  • 目前Pacel只能用来构建用于运行在浏览器中的网页,这也是他的出发点和专注点
  • Parcel
    内置了一个开发服务器,这会在你更改文件时自动重建你的应用程序,并支持模块热替换 ,以便你快速开发。你只需指定入口文件即可:
  • 零配置 快

2、优点

  • Parcel内置了常见场景的构建方案及依赖,无需安装各种依赖
  • Parcel能以HTML为入口,自动检测和打包依赖资源
  • Parcel默认支持模块热替换,真正的开箱即用
  • 0配置,非常快、 全部内置了静态资源

3、缺点

  • 不支持SourceMap
  • 不支持剔除无效代码(TreeShaking)
  • 配置不灵活

4、编码

package.json

  1. {
  2. "name": "4.parceljs",
  3. "version": "1.0.0",
  4. "description": "",
  5. "main": "index.js",
  6. "scripts": {
  7. "start": "parcel src/index.html -p 8089"
  8. },
  9. "keywords": [],
  10. "author": "",
  11. "license": "ISC",
  12. "devDependencies": {
  13. "parcel": "^1.12.4"
  14. }
  15. }

index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. hello
  10. <script src="app.js"></script>
  11. </body>
  12. </html>

app.js

  1. let sum = (a,b)=>a+b;
  2. console.log(sum);

五、webpack

a bunder for javasript and frends