使用Gulp(V3.+) + Babel + Browserify 配置ES6的開發環境

源碼

這裏使用的Gulp 版本有 V3.9.1,大版本爲3.0,如果使用了V4.0版本,配置上會有比較大的改變,具體可以參考另外一篇文章:

1.簡單說明一下:

gulp 是工具,
Babel 編譯 ES6 => ES5,
Browserify 添加瀏覽器支持。

2. 整體項目結構

在這裏插入圖片描述

3. 測試代碼

3.1 App.js

class App{
    constructor(name) {
        this.name = name;
    }

    render() {
        document.querySelector("#app").innerHTML = ("test gulp babel " + this.name);
    }
}

export default App;

3.2 入口文件 entry.js

import App from "./App";

(() => {
    let app = new App("999");
    app.render();
})();

3.3 index.html 頁面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Babel + Browserify</title>
</head>
<body>
    <div id="app"></div>
<script src="dist/js/app.min.js"></script>
</body>
</html>

3.4 .babelrc Babel 基本配置

{
  "presets": ["env"]
}

4.實現方式

目的一個,但實現方式多樣,目前這裏只列出來 2 個:

4.1 第一種實現方式

單獨使用 Gulp-babel 進行轉碼,然後再使用 Browserify 打包。

4.1.1 Package.json

{
  "name": "gulpl_v3_babel",
  "version": "1.0.0",
  "description": "",
  "main": "entry.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-preset-env": "^1.6.1",
    "browserify": "^16.5.0",
    "gulp": "^3.9.1",
    "gulp-babel": "^6.1.2",
    "gulp-watch": "^4.3.11",
    "gulp-uglify": "^3.0.2",
    "vinyl-source-stream": "^2.0.0"
  }
}

注意以上使用的 Gulp 版本。

4.1.2 gulpfile.js

const gulp = require('gulp');
const babel = require('gulp-babel');
const uglify = require('gulp-uglify');
const browserify = require('browserify');
const source = require('vinyl-source-stream');

// 編譯並壓縮js
gulp.task('js', function(){
    return gulp.src('src/js/*.js')
    .pipe(babel())
    // .pipe(concat('app.js')) //should't merge for browserify support require module
    .pipe(uglify())
    .pipe(gulp.dest('build/js'))
});

// 監視文件變化,自動執行任務,自行按需使用,非必須。
gulp.task('watch', function(){
    gulp.watch('src/js/*.js', ['browserify']);
});

// browserify [not support import|export but require]
gulp.task('browserify', ['js'], function () {
    var b = browserify({
        entries: './build/js/entry.js'
    });

    return b.bundle()
        .pipe(source('app.min.js'))
        .pipe(gulp.dest('dist/js'));
});

gulp.task('default', ['browserify', 'watch']);

直接使用 gulp 命令編譯,成功之後,訪問 index.html 頁面就可以看到效果。
在這裏插入圖片描述

4.2 不單獨使用 Gulp-babel 轉碼,直接使用 Browserify 的 transform 方法引入 Babel.

4.2.1 package.json

{
  "name": "gulp_babel",
  "version": "1.0.0",
  "description": "",
  "main": "entry.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "devDependencies": {
    "babelify": "^8.0.0",
    "babel-core": "^6.26.3",
    "babel-preset-env": "^1.6.1",
    "browserify": "^16.5.0",
    "gulp": "^3.9.1",
    "gulp-watch": "^4.3.11",
    "gulp-uglify": "^3.0.2",
    "vinyl-buffer": "^1.0.1",
    "vinyl-source-stream": "^2.0.0"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {}
}

4.2.2 gulpfile.js

const gulp = require('gulp');
const uglify = require('gulp-uglify');
const browserify = require('browserify');
const source = require('vinyl-source-stream');
const babelify = require('babelify');
const buffer = require('vinyl-buffer');

// 監視文件變化,自動執行任務,自行按需使用,非必須。
gulp.task('watch', function(){
    gulp.watch('src/js/*.js', ['browserify']);
});

// browserify
gulp.task("browserify", function () {
    var b = browserify({
        entries: "./src/js/entry.js"
    });

    return b.transform(babelify, {
        presets: [
            'env'  //轉換es6代碼
        ]
    })
    .bundle()g
    .pipe(source("app.min.js"))
    .pipe(buffer())
    .pipe(uglify())
    .pipe(gulp.dest("dist/js"));
});

gulp.task('default', ['browserify']);

直接訪問 index.html 展示效果一樣。

發佈了168 篇原創文章 · 獲贊 45 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章