我自己之前也遇到过同样的问题...正如 Qantas 在评论中提到的那样,Babel(以前的 6to5)将转换语法,但它不会进行模块加载或 polyfills。
我发现最简单的工作流程是将browserify与gulp一起使用。这需要一次性完成转译、添加 polyfill、捆绑、缩小和源映射生成。这个问题有一个很好的例子:Gulp + browserify + 6to5 + source maps。
这个版本增加了缩小和 polyfills。您的案例示例如下所示:
let gulp = require('gulp');
let browserify = require('browserify');
let babelify = require('babelify');
let util = require('gulp-util');
let buffer = require('vinyl-buffer');
let source = require('vinyl-source-stream');
let uglify = require('gulp-uglify');
let sourcemaps = require('gulp-sourcemaps');
gulp.task('build:demo', () => {
browserify('./demo/app.js', { debug: true })
.add(require.resolve('babel-polyfill/dist/polyfill.min.js'))
.transform(babelify.configure({ presets: ['es2015', 'es2016', 'stage-0', 'stage-3'] }))
.bundle()
.on('error', util.log.bind(util, 'Browserify Error'))
.pipe(source('demo.js'))
.pipe(buffer())
.pipe(sourcemaps.init({ loadMaps: true }))
.pipe(uglify({ mangle: false }))
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('./demo'));
});
gulp.task('default', ['build:demo']);
uglify 将 mangle 设置为 false 很重要;转换后的代码似乎真的不太好。
如果您没有安装所有依赖项,您可能需要创建一个package.json
文件,并确保在依赖项对象中定义了以下包:
"devDependencies": {
"babel-polyfill": "^6.13.0",
"babel-preset-es2015": "^6.13.0",
"babel-preset-es2016": "^6.11.0",
"babel-preset-stage-0": "^6.5.0",
"babel-preset-stage-3": "^6.11.0",
"babelify": "^7.3.0",
"browserify": "^13.1.0",
"gulp": "^3.9.0",
"gulp-sourcemaps": "^1.6.0",
"gulp-uglify": "^2.0.0",
"gulp-util": "^3.0.0",
"vinyl-buffer": "^1.0.0",
"vinyl-source-stream": "^1.1.0"
}
如果安装,其中大多数将无法工作-g
,因此请考虑自己警告:P
然后,只需运行npm install
以安装所有依赖项,并gulp
运行默认任务并转译所有代码。
你的其他文件看起来不错,你有正确的想法,在每个文件的开头导入并导出你的默认值:) 如果你想要一些 babelified ES6 的例子,我在 GitHub 上有几个项目可能会有所帮助。