首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何同时使用'gulp-babel‘和'gulp-browserify’

如何同时使用'gulp-babel‘和'gulp-browserify’
EN

Stack Overflow用户
提问于 2015-11-26 02:12:00
回答 3查看 9.6K关注 0票数 11

我试着写这些代码

代码语言:javascript
复制
 gulp.task('script', function() {
  'use strict'
  return gulp.src(['app.js', 'components/**/*.jsx'])
    .pipe(babel())
    .pipe(browserify())
    .pipe(gulp.dest("dist"));
});

但它显示了一些错误:

代码语言:javascript
复制
SyntaxError: 
/Users/Zizy/Programming/learn-react-js/components/CommentBox.jsx:58
    <div className="commentBox">
    ^
ParseError: Unexpected token
    at wrapWithPluginError (/Users/Zizy/Programming/learn-react-js/node_modules/gulp-browserify/index.js:44:10)

似乎在.pipe(browserify())出现之前,gulp并没有对jsx代码进行转换。但如果我只是删除.pipe(browserify()),我发现这确实是一种转换,只是不能让babel和browserify一起工作。

我知道也许我可以像babelifybrowserify plugin for babel一样使用,但我只是想找出原因。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-26 09:07:48

gulp browserify并不是这样工作的。你不需要给它一堆缓冲区来收集和捆绑。

你给它一个文件--入口文件--它会把这个文件传递给Browserify。Browserify检查条目文件引用了哪些其他文件,然后直接从文件系统加载这些文件,这意味着您不能事先使用gulp插件修改它们。

所以,真的,如果我们假装你不想在你的源文件上使用Babel,你的gulpfile应该是这样的,只是传入了entry文件:

代码语言:javascript
复制
 gulp.task('script', function() {
  'use strict'
  return gulp.src('app.js')
    .pipe(browserify())
    .pipe(gulp.dest("dist"));
});

但是,请注意不再维护gulp browserify,这正是原因所在。gulp插件不应该直接从文件系统读取数据。这就是为什么你应该将Browserify (或者,在你的例子中,是Babelify)直接与黑胶源流as recommended in the gulp recipes一起使用。它更惯用,也不那么令人困惑。

以上就是我对您的问题的回答,但我想补充一下:如果您正在使用ES2015模块语法(您可能应该这样做),那么有一种更好的方法可以做到这一点。Browserify将所有模块单独包装在一堆代码中,以使编程的CommonJS应用程序接口正常工作,但ES2015模块具有声明性语法,这使得工具更容易对其进行静态操作。有一个名为Rollup的工具利用了这一点,允许它生成比Browserify更小、更快、更精简的包。

下面是你如何在大口大口地使用:

代码语言:javascript
复制
var gulp = require('gulp'),
    rollup = require('rollup-stream'),
    babel = require('gulp-babel'),
    source = require('vinyl-source-stream'),
    buffer = require('vinyl-buffer');

gulp.task('script', function() {
  return rollup({entry: 'app.js'})
    .pipe(source('app.js'))
    .pipe(buffer())
    .pipe(babel())
    .pipe(gulp.dest('dist'));
});
票数 19
EN

Stack Overflow用户

发布于 2015-11-26 07:48:55

从Babel 6开始,您需要手动声明预设,请检查this

基本上,在项目的根目录中,您需要一个包含以下内容的.babelrc

代码语言:javascript
复制
{
  "presets": [ "es2015", "react" ]
}

以及package.json中对应的npm模块:

代码语言:javascript
复制
// package.json

{
  "devDependencies": {
    ...
    "babel-preset-es2015": "^6.1.18",
    "babel-preset-react": "^6.1.18",
    ...
  }
}
票数 0
EN

Stack Overflow用户

发布于 2019-03-07 04:07:29

这是一个包含gulpbabelbrowserifysample repository

以下是代码片段

代码语言:javascript
复制
gulp.task("js", (done) => {
  const bundler = browserify({ entries: paths.js.source }, { debug: true }).transform(babel);
  bundler.bundle()
    .on("error", function (err) { console.error(err); this.emit("end"); })
    .pipe(source(paths.build.destMinJSFileName))
    .pipe(buffer())
    .pipe(sourcemaps.init({ loadMaps: true }))
    .pipe(uglify())
    .pipe(sourcemaps.write(paths.js.destMapFolder))
    .pipe(gulp.dest(paths.build.destBuildFolder));

  done();
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33923630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档