我试着写这些代码
gulp.task('script', function() {
'use strict'
return gulp.src(['app.js', 'components/**/*.jsx'])
.pipe(babel())
.pipe(browserify())
.pipe(gulp.dest("dist"));
});但它显示了一些错误:
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一起工作。
我知道也许我可以像babelify或browserify plugin for babel一样使用,但我只是想找出原因。
发布于 2015-11-26 09:07:48
gulp browserify并不是这样工作的。你不需要给它一堆缓冲区来收集和捆绑。
你给它一个文件--入口文件--它会把这个文件传递给Browserify。Browserify检查条目文件引用了哪些其他文件,然后直接从文件系统加载这些文件,这意味着您不能事先使用gulp插件修改它们。
所以,真的,如果我们假装你不想在你的源文件上使用Babel,你的gulpfile应该是这样的,只是传入了entry文件:
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更小、更快、更精简的包。
下面是你如何在大口大口地使用:
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'));
});发布于 2015-11-26 07:48:55
从Babel 6开始,您需要手动声明预设,请检查this。
基本上,在项目的根目录中,您需要一个包含以下内容的.babelrc:
{
"presets": [ "es2015", "react" ]
}以及package.json中对应的npm模块:
// package.json
{
"devDependencies": {
...
"babel-preset-es2015": "^6.1.18",
"babel-preset-react": "^6.1.18",
...
}
}发布于 2019-03-07 04:07:29
这是一个包含gulp、babel和browserify的sample repository
以下是代码片段
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();
});https://stackoverflow.com/questions/33923630
复制相似问题