我正在构建一个gulp脚本来处理我的ES2015代码,最终会有反应,但它根本无法正常工作。 Uglify投掷错误。 (stream.js:74 throw er; //管道中未处理的流错误。)一旦我看到构建,很明显ES2015代码没有被转换。
此问题的大多数解决方案涉及缺少预设。我确保包含babel-preset-es2015
。我有一个.babelrc文件,内容如下:
{
"presets": ["es2015", "react"]
}
如果没有它,我的`gulpfile.babel.js就无法运行。
我正在尝试处理的文件非常简单:
// index.js
let bobby = "bobby"
console.log(bobby + ' Drink rum.')
当它变成早期的JavaScript时,let
应替换为var
。也许我的gulpfile.babel.js
出了问题?
import gulp from 'gulp';
import gulpLoadPlugins from 'gulp-load-plugins';
import runSequence from 'run-sequence';
import babel from 'gulp-babel';
// load all gulp-* plugins in node_modules
const plugins = gulpLoadPlugins()
gulp.task('default', () => {
runSequence('build', 'copy:index')
})
gulp.task('build', () => {
return gulp.src('src/**/*.js')
.pipe(babel())
.pipe(plugins.webpack())
// .pipe(plugins.uglify())
.pipe(plugins.rename('bundle.js'))
.pipe(gulp.dest('dist/'))
})
gulp.task('copy:index', () => {
gulp.src('src/index.html')
.pipe(gulp.dest('dist/'))
})
我的gulp版本是3.9.1 我的节点版本是6.2.0
到目前为止,这些是我的依赖项:
"dependencies": {
"babel-core": "^6.17.0",
"babel-plugin-transform-react-jsx": "^6.8.0",
"babel-preset-es2015": "^6.16.0",
"babel-preset-react": "^6.16.0",
"babel-register": "^6.16.3",
"gulp": "^3.9.1",
"gulp-babel": "^6.1.2",
"gulp-filter": "^4.0.0",
"gulp-load-plugins": "^1.3.0",
"gulp-rename": "^1.2.2",
"gulp-uglify": "^2.0.0",
"gulp-webpack": "^1.5.0",
"react": "^15.4.0-rc.4",
"react-dom": "^15.4.0-rc.4",
"run-sequence": "^1.2.2",
"webpack": "^1.13.2"
}
更新:所以我去为Babel创建了一个单独的任务,它可以工作。当我在uglify上添加并重命名它有效时,但是当我添加Webpack时,它有问题。显然,Webpack并不是很好玩。有没有其他人在使用Webpack和gulp时遇到这种麻烦?
答案 0 :(得分:1)
让我问一下,你真的需要webpack与gulp-babel玩得很好吗?我们知道webpack可以很好地与babel一起使用,并且通常来自我迄今为止所阅读的所有内容,webpack与gulp并不一致。任何webpack插件都会发生很多奇怪的事情。到目前为止,我发现使用webpack和gulp协同工作的最佳资源是here。
到目前为止,我的建议是,忘记尝试让webpack和gulp一起玩得很好。相反,当你对js进行更改时,只需要gulp运行webpack。这是我的设置:
var webpack = require('webpack');
var path = require('path');
module.exports = {
entry: './assets/js/index.js',
devtool: 'source-map',
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader'
},
... [other webpack things] ...
在我的package.json中,我使用cross-env设置了一个脚本来运行webpack
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"wp-dev": "cross-env NODE_ENV=development webpack --progress --hide-modules",
"wp-build": "cross-env NODE_ENV=production webpack --progress --hide-modules"
},
现在是gulp,根据phase2technology.com的建议,这是我的任务:
gulp.task('webpack', (cb) => {
exec('npm run wp-dev', function(err, stdout, stderr){
console.log(stdout);
console.log(stderr);
cb(err);
});
});
我真的认为这里的关键是让webpack进行捆绑并使用gulp来运行任务。