【发布时间】:2017-02-23 01:21:24
【问题描述】:
考虑以下两个文件:
app.js
import Game from './game/game';
import React from 'react';
import ReactDOM from 'react-dom';
export default (absPath) => {
let gameElement = document.getElementById("container");
if (gameElement !== null) {
ReactDOM.render(
<Game mainPath={absPath} />,
gameElement
);
}
}
index.js
import App from './src/app';
gulpfile.js
var gulp = require('gulp');
var source = require('vinyl-source-stream');
var browserify = require('browserify');
var babelify = require("babelify");
var watch = require('gulp-watch');
gulp.task('make:game', function(){
return browserify({
entries: [
'index.js'
]
})
.transform('babelify')
.bundle()
.pipe(source('index.js'))
.pipe(gulp.dest('app/'));
});
错误:
gulp make:game
[13:09:48] Using gulpfile ~/Documents/ice-cream/gulpfile.js
[13:09:48] Starting 'make:game'...
events.js:154
throw er; // Unhandled 'error' event
^
SyntaxError: 'import' and 'export' may appear only with 'sourceType: module'
这是什么错误?我做错了什么?
【问题讨论】:
-
见 this issue on GitHub. 使用 babelify 的较新版本的 Babel 似乎是个问题。
-
就我而言,我没有使用 babelify,但仍然出现此错误。
-
在我的例子中,当我尝试编译导入 TypeScript 文件的 JS 文件时,我在 browserify 和 babelify 中遇到了这个错误,例如从 "./foo" (foo.ts) 导入 * as Foo。修复方法是将
--extensions ".ts,.js"传递给 babelify 转换(因此 babel 将在编译中包含 TS 文件)并将--extension=.js --extension=.ts传递给 browserify(因此 browserify 可以解析导入语句的文件路径)。请注意,babel --extensions 选项似乎没有记录在 babel 选项中 - 我发现了它here。
标签: javascript gulp ecmascript-6 browserify babeljs