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');
});
});

  

browserify babel gulp 没有编译import的文件的更多相关文章

  1. 模块之字节编译的.pyc文件---from.import语句

    字节编译的.pyc文件输入一个模块相对来说是一个比较费时的事情,所以Python做了一些技巧,以便使输入模块更加快一些.一种方法是创建 字节编译的文件 ,这些文件以.pyc作为扩展名.字节编译的文件与 ...

  2. gulp实时编译less,压缩合并requirejs模块文件

    gulp的使用命令简单,就几个,gulp的简单使用教材可以参考一点的gulp使用教材(http://www.ydcss.com/archives/18). 下面就简单的介绍这些命令如何互相配合的完成前 ...

  3. 用gulp把less文件编译成css文件

    第一次使用gulp构建工具,使用gulp将.less文件编译成.css文件并输出.根据视频做了笔记.提供新手和自己以后做参考. HTML文件 <!DOCTYPE html> <htm ...

  4. 何为babel / gulp

    Babel主要用来将新版本的javascript(ES6,ES7)编译为ES5,目前它对于新标准的支持程度甚至高于Chrome浏览器.通过引入预设babel-preset-react,babel还能解 ...

  5. gulp 搭建个人工作流:文件注入、热启动、跨域

    个人比价推崇前后端分离的开发方式,大家伙各司其职,只需通过 API 进行交流,不仅避免了沟通上的成本,更提升了开发效率.而在前端开发工作中,许多需求和问题是相似的,所以我们的开发模式往往是雷同的,是否 ...

  6. 编译PCL Tutorial文件

    1.PCL Tutorial是使用SPHINX编译而成的. 2.安装Python2.7,从官方网站上下载(Portable Python测试未成功,待研究). 3.安装setuptools,安装成功会 ...

  7. Mac上把python源文件编译成so文件

    把python源文件编译成so文件 前言 实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求. ...

  8. Golang 编译成 DLL 文件

    golang 编译 dll 过程中需要用到 gcc,所以先安装 MinGW. windows 64 位系统应下载 MinGW 的 64 位版本: https://sourceforge.net/pro ...

  9. 第48章 MDK的编译过程及文件类型全解—零死角玩转STM32-F429系列

    第48章     MDK的编译过程及文件类型全解 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.co ...

随机推荐

  1. Java 11 部分新特性

    JEP 320: Remove the Java EE and CORBA Modules(删除 Java EE 和 CORBA 模块) Java EE和CORBA两个模块在JDK9中已经标记&quo ...

  2. 动态quartz新增、修改、删除

    1.定义job导出类 public class MyQuartzJob implements Job { private static Logger logger = LoggerFactory.ge ...

  3. echarts x轴文字显示不全(xAxis文字倾斜比较全面的3种做法值得推荐)

    出处:http://blog.csdn.net/kebi007/article/details/68488694

  4. nonzero

    在python的numpy里面这个函数的意义是返回参数数组中不为0的元素的索引(indics). from numpy import array from numpy import nonzero x ...

  5. Hadoop JAVA HDFS客户端操作

    JAVA HDFS客户端操作 通过API操作HDFS org.apache.logging.log4jlog4j-core2.8.2org.apache.hadoophadoop-common${ha ...

  6. SDRAM读写操作

    SDRAM读写操作 1.读操作 2.写操作 SDRAM所有时序参数都可以在芯片手册上查到.

  7. Scrapy环境安装

    开始安装前,建议安装Visual C++ 2015 Build Tools,否则会一直出现如下提示: 下载地址:http://landinghub.visualstudio.com/visual-cp ...

  8. debian的python蓝牙库

    sudo apt--dev pip install bluepy

  9. spring boot编译项目打jar包

    <build> <plugins> <!--jar包打包--> <plugin> <groupId>org.springframework. ...

  10. PHP 数据运算类型都有哪些?

    四种标量类型:布尔型 boolean $bo=TRUE; $bo=FALSE;整型 integer  $bo=1; $bo=-12;浮点型 float/double  $bo=1.001; $bo=3 ...