browserify babel gulp 没有编译import的文件

1.遇到坑的gulp配置:

var gulp = require('gulp'),
	watch = require('gulp-watch'),
	babel = require('gulp-babel');
var envify = require('gulp-envify');
var browserify = require('gulp-browserify');
var SourceMap = require('gulp-sourcemaps');
var uglify = require('gulp-uglifyjs');
var SourceMapSupport = require('gulp-sourcemaps-support');
gulp.task('react', () => {
	var environment = {
		NODE_ENV: 'production'
	};
	gulp.src('./es/index.js')
		.pipe(SourceMap.init())
		.pipe(babel({
			babelrc: false,
			plugins: ['transform-es2015-modules-commonjs']
		}))
		.pipe(browserify({
			insertGlobals: true,
			debug: !gulp.env.production
		}))
		.pipe(envify(environment))
		.pipe(uglify())
		.pipe(SourceMap.write('.'))
		.pipe(gulp.dest('js'))
});

gulp.task('default', () => {
	return watch('./es/*.js', function() {
		gulp.run('react');
	});
});

  

  今天我遇到了这个问题,babel运行了先把es6文件编译,然后交给browserify 处理import的文件,可是报错了,因为先用babel编译es6文件后,import export 编译成了require module exports 这类,这样browserify就可以识别,然后browserify就会导入这些import的文件,然后打包进去到js文件里面。可是回到babel编译上,有一个问题是babel没有把import的文件也给编译了,因为babel不能导入import文件来处理,babel只是编译了es6代码,并不进行import的文件的打包处理,所以import的文件就没有被babel编译,然后交给browserify处理后,会出现import文件里的es6语法没有被编译。

 

      这时候解决思路就是再babel编译一遍经过babel->browserify后的文件,也就是babel->browserify->babel,这样import的文件也会被编译成es6语法,不过babel->browserify过程 import自己写的文件需要用require方式导入,export也是需要exports方式导出,这样browserify才能识别,因为browserify不认识import文件里的import类语法。

2.改进配置:

var gulp = require('gulp'),
	watch = require('gulp-watch'),
	babel = require('gulp-babel');
var envify = require('gulp-envify');
var browserify = require('gulp-browserify');
var SourceMap = require('gulp-sourcemaps');
var uglify = require('gulp-uglifyjs');
var SourceMapSupport = require('gulp-sourcemaps-support');
gulp.task('react', () => {
	var environment = {
		NODE_ENV: 'production'
	};
	gulp.src('./es/index.js')
		.pipe(SourceMap.init())
		.pipe(babel({
			babelrc: false,
			presets: ['es2015', 'es2016', 'es2017', 'stage-0', 'react'],
			plugins: ['transform-decorators-legacy']
		}))  //编译es6文件
		.pipe(browserify({
			insertGlobals: true,
			debug: !gulp.env.production
		})) //打包require文件到js包里面
		.pipe(babel({
			babelrc: false,
			presets: ['es2015', 'es2016', 'es2017', 'stage-0', 'react'],
			plugins: ['transform-decorators-legacy']
		})) //再编译一次require文件里的es6语法
		.pipe(envify(environment))
		.pipe(uglify())
		.pipe(SourceMap.write('.'))
		.pipe(gulp.dest('js'))
});

gulp.task('default', () => {
	return watch('./es/*.js', function() {
		gulp.run('react');
	});
});

  2.优化gulp配置:

var gulp = require('gulp'),
	watch = require('gulp-watch'),
	babel = require('gulp-babel');
var envify = require('gulp-envify');
var browserify = require('gulp-browserify');
var SourceMap = require('gulp-sourcemaps');
var uglify = require('gulp-uglifyjs');
var SourceMapSupport = require('gulp-sourcemaps-support');
gulp.task('react', () => {
	var environment = {
		NODE_ENV: 'production'
	};
	gulp.src('./es/index.js')
		.pipe(SourceMap.init())
		.pipe(babel({
			babelrc: false,
			plugins: ['transform-es2015-modules-commonjs']
		})) //这里只需要把import export 编译成commonjs规范即可,这样browserify就可以识别了
		.pipe(browserify({
			insertGlobals: true,
			debug: !gulp.env.production
		}))
		.pipe(babel({
			babelrc: false,
			presets: ['es2015', 'es2016', 'es2017', 'stage-0', 'react'],
			plugins: ['transform-decorators-legacy']
		})) //最终这里再把js文件中所有的es6语法编译成es5语法
		.pipe(envify(environment))
		.pipe(uglify())
		.pipe(SourceMap.write('.'))
		.pipe(gulp.dest('js'))
});

gulp.task('default', () => {
	return watch('./es/*.js', function() {
		gulp.run('react');
	});
});

  

转载于:https://www.cnblogs.com/jocongmin/p/6702022.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值