使用Gulp(V4.+) + Babel + Browserify 配置ES6的开发环境

源码

关于 Gulp V3 的环境配置,请参考如下文章:
使用Gulp(V3.+) + Babel + Browserify 配置ES6的开发环境

如果使用的 Gulp 版本是 V4 以上的,配置相对于 V3 有些许的变化。

1.注意点

往往我们使用的 Gulp 编译命令是使用的全局的 Gulp,而非局部的。所以,如果局部使用了 V4的版本,而全局的Gulp 是 V3 版本的,那么在执行 gulp 命令时,会出现以如下错误信息:

C:\Users\X_XXXXX\xxx\Roaming\npm\node_modules\gulp\bin\gulp.js:129
    gulpInst.start.apply(gulpInst, toRun);
                   ^

TypeError: Cannot read property 'apply' of undefined
    at C:\Users\X_XXXXX\xxx\Roaming\npm\node_modules\gulp\bin\gulp.js:129:20
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)
    at Function.Module.runMain (module.js:695:11)
    at startup (bootstrap_node.js:191:16)
    at bootstrap_node.js:612:3

可以先使用如下命令查看一下全局的 gulp 版本信息:
在这里插入图片描述

1.1 解决方式有 2 个

1.1.1 将全局的 gulp 更新到V4

使用如下命令更新 gulp 的版本信息

npm install -g gulp

成功之后,再使用命令查看其版本,如果版本也在 V4 及以上就可以了。

1.1.2 使用局部的 gulp 运行编译命令

在如下路径中执行 gulp 命令:

~gulp_v4_babel\node_modules\gulp\node_modules\.bin>gulp

这样就是使用的局部的 gulp 来进行编译的了。

2. 项目结构

在这里插入图片描述

3. 测试代码

3.1 App.js

class App {

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

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

export default App;

3.2 entry.js

import App from "./App";

(function () {
    let app = new App(" asdf");
    app.render();
})();

3.3 index.html

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

3. package.json

{
  "name": "gulp_v4_babel",
  "version": "1.0.0",
  "description": "",
  "main": "entry.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.8.3",
    "@babel/plugin-transform-runtime": "^7.8.3",
    "@babel/preset-env": "^7.8.3",
    "@babel/runtime": "^7.8.3",
    "babel-loader": "^8.0.6",
    "babelify": "^10.0.0",
    "browserify": "^16.5.0",
    "gulp": "^4.0.2",
    "gulp-babel": "^8.0.0",
    "gulp-concat": "^2.6.1",
    "gulp-rev": "^9.0.0",
    "gulp-series": "^1.0.2",
    "gulp-uglify": "^3.0.2",
    "gulp-watch": "^5.0.1",
    "vinyl-source-stream": "^2.0.0"
  }
}

4. .babelrc babel基本配置

{
  "presets": ["@babel/preset-env"]
}

5. gulpfile.js

const gulp = require("gulp"),
    babel = require("gulp-babel"),
    uglify = require("gulp-uglify"),
    concat = require("gulp-concat"),
    browserify = require("browserify"),
    source = require("vinyl-source-stream");

gulp.task("js", function () {
    return gulp.src("./src/js/*.js")
        .pipe(babel())
        .pipe(uglify())
        .pipe(gulp.dest("build/js"));
});

gulp.task("browserify", gulp.series(["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", gulp.series(["browserify"]));

当然这里也可以使用 gulp 的 transform 方法,而不使用 gulp-babel 单独再编译。具体可参考
使用Gulp(V3.+) + Babel + Browserify 配置ES6的开发环境

发布了168 篇原创文章 · 获赞 45 · 访问量 23万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章