我还是初学者,我尝试将一个类导出并导入到主文件中,另一个类导入其他类文件并使用它们.
然后用6to5(现在的Babel)吞下ES5代码.
// file a.js
import B from 'b.js';
class A {
constructor() {
B.methodB();
}
}
export default A;
// file b.js
class B {
methodB() {
console.log('hi from b');
}
}
export default B;
// file main.js
import A from 'a.js';
new A();
Run Code Online (Sandbox Code Playgroud)
我的gulpfile:
var gulp = require('gulp');
var to5 = require('gulp-6to5');
gulp.task('default', function () {
return gulp.src('main.js')
.pipe(to5())
.pipe(gulp.dest('dist'));
});
Run Code Online (Sandbox Code Playgroud)
这是我的dist/main.js档案:
"use strict";
var _interopRequire = function (obj) {
return obj && (obj["default"] || obj); …Run Code Online (Sandbox Code Playgroud) 这是将我的ES6代码编译成单个ES5文件的gulp任务.我在ES6中使用类和模块(import,export).
gulp.src(paths.scripts)
.pipe(sourcemaps.init())
.pipe(babel({
presets: ['es2015']
}))
.pipe(concat('all.js'))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('./www/js'));
Run Code Online (Sandbox Code Playgroud)
但是,因为Babel将ES6 import指令编译成require命令,并且require将尝试请求文件,所以请求文件失败,因为所有ES5代码都被连接到一个文件all.js.
结果是一堆"错误:无法找到模块"错误.如何编译在单个文件中保存的模块?
我正在尝试转译这个简单的代码以便在浏览器中使用,但它不起作用并且无法正常Uncaught ReferenceError: require is not defined工作require('uniq')(array);
我知道浏览器(在我的例子中是 chrome )不支持 require,但我认为这就是 babel 应该做的。
我可以使用 webpack 或 browserify,但这次我尝试使用 Babel 并遇到了这个问题。
包.json
"devDependencies": {
"@babel/cli": "^7.11.5",
"@babel/core": "^7.11.5",
"@babel/preset-env": "^7.11.5"
},
"dependencies": {
"@babel/polyfill": "^7.11.5",
"uniq": "^1.0.1"
}
Run Code Online (Sandbox Code Playgroud)
索引.js
const array = [1,1,2,2,3,5]
require('uniq')(array)
document.querySelector('p').innerText = array
Run Code Online (Sandbox Code Playgroud)
使用 babel 进行转译
npx babel index.js --out-file index2.js
index2.js(由babel生成)
"use strict";
const array = [1, 1, 2, 2, 3, 5];
require('uniq')(array);
document.querySelector('p').innerText = array;
Run Code Online (Sandbox Code Playgroud)
babel.config.json
{
"presets": [
[
"@babel/env",
{
"targets": …Run Code Online (Sandbox Code Playgroud) 我是巴贝尔新手.
我这样设置:
.babelrc:
{
"presets": ["es2015", "es2017"]
}
Run Code Online (Sandbox Code Playgroud)
gulpfile:
gulp.task('default', function() {
return gulp.src(['src/**/*.js', '!src/**/3rd/*'])
.pipe(babel())
.pipe(gulp.dest('dist'));
});
Run Code Online (Sandbox Code Playgroud)
然而,这似乎是编译为es5,这在Safari中并不完全支持.
有没有办法设定目标?那么它可以编译成ES3吗?