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

  

时间: 2024-12-22 07:31:37

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

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

字节编译的.pyc文件输入一个模块相对来说是一个比较费时的事情,所以Python做了一些技巧,以便使输入模块更加快一些.一种方法是创建 字节编译的文件 ,这些文件以.pyc作为扩展名.字节编译的文件与Python变换程序的中间状态有关(是否还记得Python如何工作的介绍?).当你在下次从别的程序输入这个模块的时候,.pyc文件是十分有用的——它会快得多,因为一部分输入模块所需的处理已经完成了.另外,这些字节编译的文件也是与平台无关的.所以,现在你知道了那些.pyc文件事实上是什么了. ~~~~

何为babel / gulp

Babel主要用来将新版本的javascript(ES6,ES7)编译为ES5,目前它对于新标准的支持程度甚至高于Chrome浏览器.通过引入预设babel-preset-react,babel还能解析jsx语法结构. 其实,原本的babel什么都不会做,babel index.js只是将index.js里的内容输出到控制台.而babel index.js --out-file output.js 则产生一个新文件(如果没有提前创建的话),并把index.js的内容拷贝到output.js中:b

typescript 自动编译 生成js文件

项目文件 <?xml version="1.0" encoding="utf-8"?><Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  <Import Project="$(MSBuildExt

Java前端编译:Java源代码编译成Class文件的过程

Java前端编译:Java源代码编译成Class文件的过程 在上篇文章<Java三种编译方式:前端编译 JIT编译 AOT编译>中了解到了它们各有什么优点和缺点,以及前端编译+JIT编译方式的运作过程. 下面我们详细了解Java前端编译:Java源代码编译成Class文件的过程:我们从官方JDK提供的前端编译器javac入手,用javac编译一些测试程序,调试跟踪javac源码,看看javac整个编译过程是如何实现的. 1.javac编译器 1-1.javac源码与调试 javac编译器是官方

Android NDK 编译加入so文件

在cocos2d-x中集成百度语音识别的时候,运行build_native.py会把libs/armeabi目录清空. 以下是解决办法,把so文件放在jni/prebuilt里面. 修改Android.mk文件,主要有两行include $(CLEAR_VARS) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) #百度语音识别so LOCAL_MODULE := BDVoiceRecognitionClient_V1 LOCAL_SRC_FI

Gulp解决发布线上文件(CSS和JS)缓存问题

本文的缘由:目前经常线上发布文件后要不断的刷新页面及过很长时间,页面上的CSS和JS文件才能生效,特别对于目前做微信商城的时候,微信内置的浏览器缓存非常的严重,之前我们经常是在文件后面加上时间戳的方式来解决线上发布后的缓存问题,但是在微信浏览器内并不生效:因此我们需要改变文件名的方式来解决缓存的问题,因此使用后缀名加上MD5一连串的字符串来解决缓存的问题: 我们先可以考虑这么一个功能,我在页面上引用css文件如下: ./css/xx.css ./js/xx.js 我现在想通过使用MD5重新命名c

配置SharpDevelop编译单个cs文件

近日开始学习C#,看的是陈广老师的教程,视频中用的开发工具是SharpDevelop,工具没有编译单文件的功能,建立工程的话一大堆文件太麻烦,百度找了一下相关资料挺少的(或者是我找资料能力不行),然后发现了一篇好文章[如何编译单个cs文件:http://xloved.blog.163.com/blog/static/18571909420114854026152/],尝试后效果确实不错,个人在此基础上进行了改进一点改进. 第一步:创建bat批处理.用记事本建立一个consoleComplier.

浅析Class文件反编译后的文件与源码文件大小关系

1.  编辑java文件后(有注释的情况下) 使用eclipse编译后成为.class文件后 2. 使用反编译工具编译后使用自带(Ctrl+S)的保存源码方式保存 3. 仅复制java翻译后的信息 其大小目前为149字节. 后续处理 a.      现在删除掉[第一步]源码文件中无关注释行,其大小变为118字节,但是其功能仍能实现. b.      现在将[第二步]中反编译工具保存的源码删除了无关部分,再看其大小.发现只有通过删除无关代码和空行后,才能使得其大小与第三步得到为java文件大小一致

VS2008编译器编译出来的文件比mingw编译的要几乎小一半

为什么要在VS2008中使用QT静态编译呢?很简单,因为VS2008编译器编译出来的文件比mingw编译的要几乎小一半. 好了现在我们来做些准备工作,VS2008自然要安装的,然后打上SP1的补丁.然后我们要到QT主页下载,QT4.7.4版的源码包 qt-everywhere-opensource-src-4.7.4.zip,因为用源码包编译没那么容易出错:另外还有QT for VS 的插件 qt-vs-addin-1.1.9.exe,这两个准备好就可以开始安装了. 第一步: 把源码 包qt-e