Gulp 带有 babel-preset-react 的 babel 不转换 JSX 代码
Gulp babel with babel-preset-react not transforming JSX code
我在使用 gulp 编译 React jsx 代码时遇到问题。这是我的 gulpfile.js
的样子 -
const gulp = require('gulp');
const babel = require('gulp-babel');
gulp.task('js', () => {
return gulp.src('src/main.js')
.pipe(babel({
presets: ['es2015', 'react']
}))
.pipe(gulp.dest('build'));
});
gulp.task('default', ['js'], () => {
gulp.watch('src/main.js', ['js']);
});
在我的包 json 文件中
"devDependencies": {
"babel-preset-es2015": "^6.18.0",
"babel-preset-react": "^6.16.0",
"gulp": "^3.9.1",
"gulp-babel": "^6.1.2"
},
"dependencies": {
"react": "^15.4.0",
"react-dom": "^15.4.0"
}
当我输入 es2015 代码时,它确实发生了转换。但是 jsx 代码没有转换。
我正在尝试编译以下代码 -
import Hello from './hello.jsx';
import World from './world.jsx';
[1,2,3].map(n => console.log(n + 1));
但它只符合 es6 代码而不符合 jsx
'use strict';
var _hello = require('./hello.jsx');
var _hello2 = _interopRequireDefault(_hello);
var _world = require('./world.jsx');
var _world2 = _interopRequireDefault(_world);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
[1, 2, 3].map(function (n) {
return console.log(n + 1);
});
我也尝试使用 webpack,发现 babel-preset-react
可以正常工作,但 gulp-babel
则不行。之前我使用了另一个 gulp 工具来编译,但这次我想使用 gulp-babel 但似乎没有按预期工作。
非常感谢任何形式的帮助。
感谢@sven @hector 指出我的意见。
我用我的传统方法 browserify 和 babelify 得到了它。这是它的样子
const gulp = require('gulp');
const browserify = require('browserify');
const babelify = require('babelify');
const source = require('vinyl-source-stream');
gulp.task('js', () => {
return browserify({ entries: ['src/main.js'] })
.transform(babelify, {presets: ["react", "es2015"]}) // "es2015", "react"
.bundle()
.pipe(source('main.js'))
.pipe(gulp.dest('build'));
});
或者如果你有问题,那么使用 webpack 或者 gulp 粉丝使用 gulp-webpack
我在使用 gulp 编译 React jsx 代码时遇到问题。这是我的 gulpfile.js
的样子 -
const gulp = require('gulp');
const babel = require('gulp-babel');
gulp.task('js', () => {
return gulp.src('src/main.js')
.pipe(babel({
presets: ['es2015', 'react']
}))
.pipe(gulp.dest('build'));
});
gulp.task('default', ['js'], () => {
gulp.watch('src/main.js', ['js']);
});
在我的包 json 文件中
"devDependencies": {
"babel-preset-es2015": "^6.18.0",
"babel-preset-react": "^6.16.0",
"gulp": "^3.9.1",
"gulp-babel": "^6.1.2"
},
"dependencies": {
"react": "^15.4.0",
"react-dom": "^15.4.0"
}
当我输入 es2015 代码时,它确实发生了转换。但是 jsx 代码没有转换。
我正在尝试编译以下代码 -
import Hello from './hello.jsx';
import World from './world.jsx';
[1,2,3].map(n => console.log(n + 1));
但它只符合 es6 代码而不符合 jsx
'use strict';
var _hello = require('./hello.jsx');
var _hello2 = _interopRequireDefault(_hello);
var _world = require('./world.jsx');
var _world2 = _interopRequireDefault(_world);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
[1, 2, 3].map(function (n) {
return console.log(n + 1);
});
我也尝试使用 webpack,发现 babel-preset-react
可以正常工作,但 gulp-babel
则不行。之前我使用了另一个 gulp 工具来编译,但这次我想使用 gulp-babel 但似乎没有按预期工作。
非常感谢任何形式的帮助。
感谢@sven @hector 指出我的意见。
我用我的传统方法 browserify 和 babelify 得到了它。这是它的样子
const gulp = require('gulp');
const browserify = require('browserify');
const babelify = require('babelify');
const source = require('vinyl-source-stream');
gulp.task('js', () => {
return browserify({ entries: ['src/main.js'] })
.transform(babelify, {presets: ["react", "es2015"]}) // "es2015", "react"
.bundle()
.pipe(source('main.js'))
.pipe(gulp.dest('build'));
});
或者如果你有问题,那么使用 webpack 或者 gulp 粉丝使用 gulp-webpack