我正在编写一个react
应用,其中我require
在另一个使用ES6
语法的库中。这是我使用lib的代码:
var React = require('react');
var Calendar = require('horario-calendar');
var appts = [];
React.render(<Calendar />, document.getElementById('calendar'));
horario-calendar
是第三方应用,它充满了ES6
语法。我有一个gulp
任务,应该transpile
ES6
的所有代码。这是任务:
var browserify = require('browserify');
var reactify = require('reactify');
var source = require('vinyl-source-stream')
var to5 = require('6to5ify');
module.exports = function(gulp, config) {
gulp.task('browserify', function() {
browserify(config.app.src, {debug: true})
.transform(to5)
.transform(reactify)
.bundle()
.pipe(source(config.app.bundleName))
.pipe(gulp.dest(config.app.bundle));
});
};
但它不是transpile
代码require
d。它只是transpile
我的代码。我仍然在ES6
中导入horario-calendar
个样式。我还需要对transpile
代码做什么?
答案 0 :(得分:0)
我建议使用webpack而不是Browserify - 您还可以享受JSX热加载器带来的好处。 https://github.com/babel/6to5-loader开箱即用,但我确实取代了这个:
{ test: /\.js$/, exclude: /node_modules/, loader: '6to5-loader'}
在他们的例子中,对此:
{ test: /\.jsx$/, exclude: /node_modules/, loader: '6to5-loader'}
因为我碰巧只使用.jsx文件中的箭头功能,所以请注意。
答案 1 :(得分:0)
理想情况下,此负担将由第三方库承担,但如果这不是一个选项,您可以尝试使用global transforms:
如果opts.global为true,则转换将对所有文件进行操作, 尽管它们是否存在于node_modules /目录中的某个级别。 从大多数时候开始,谨慎而谨慎地使用全局变换 普通的变换就足够了。您也可以不配置全局 像普通变换一样在package.json中进行转换。
全局变换总是在任何普通变换运行后运行。
所以用.transform(to5)
替换.transform({ global: true }, to5)
。
此外,6to5(现为Babel)内置了JSX支持,因此您不需要Reactify。