繁体   English   中英

Webpack与gulp-babel配合不好

[英]Webpack is Not Playing Nice with gulp-babel

我正在构建一个gulp脚本来处理我的ES2015代码,最终通过react进行操作,但是它根本无法正常工作。 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时遇到这种麻烦吗?

让我问这个,您真的需要webpack才能与gulp-babel一起玩吗? 我们知道webpack可以很好地与babel配合使用,从目前为止我所读的所有内容中,通常来说webpack不能与gulp配合使用。 任何webpack插件都有很多奇怪的事情发生。 到目前为止,我发现的关于使Webpack和gulp协同工作的最佳资源在这里

到目前为止,我的建议是,不要忘记尝试使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"
  },

现在已经大吃一惊,根据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运行任务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM