Nei*_*eil 10 javascript gulp gulp-babel
我正在尝试将我的ES6模块导入到一个文件中并运行Gulp来连接并缩小文件.我遇到了一个ReferenceError:在all.js(已编译)第3行没有定义require.我用gulp-babel编译了代码.
我的js文件是:
cart.js:
class Cart{
constructor(){
this.cart = [];
this.items = items = [{
id: 1,
name: 'Dove Soap',
price: 39.99
},{
id: 2,
name: 'Axe Deo',
price: 99.99
}];
}
getItems(){
return this.items;
}
}
export {Cart};
Run Code Online (Sandbox Code Playgroud)
app.js:
import {Cart} from 'cart.js';
let cart = new Cart();
console.log(cart.getItems());
Run Code Online (Sandbox Code Playgroud)
gulpfile.js:
"use strict";
let gulp = require('gulp');
let jshint = require('gulp-jshint');
let concat = require('gulp-concat');
let uglify = require('gulp-uglify');
let rename = require('gulp-rename');
let babel = require('gulp-babel');
// Lint Task
gulp.task('lint', function() {
return gulp.src('js/*.js')
.pipe(jshint())
.pipe(jshint.reporter('default'));
});
// Concatenate & Minify JS
gulp.task('scripts', function() {
return gulp.src('js/*.js')
.pipe(babel({
presets: ['env']
}))
.pipe(concat('all.js'))
.pipe(gulp.dest('dist'))
.pipe(rename('all.min.js'))
.pipe(uglify().on('error', function(e){
console.dir(e);
}))
.pipe(gulp.dest('dist/js'));
});
// Default Task
gulp.task('default', ['lint','scripts']);
Run Code Online (Sandbox Code Playgroud)
app.js(transpiled):
'use strict';
var _cart = require('cart.js'); //Uncaught ReferenceError: require is not defined
var cart = new _cart.Cart();
console.log(cart.getItems());
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Cart = function () {
function Cart() {
_classCallCheck(this, Cart);
this.cart = [];
this.items = items = [{
id: 1,
name: 'Dove Soap',
price: 39.99
}, {
id: 2,
name: 'Axe Deo',
price: 99.99
}];
}
_createClass(Cart, [{
key: 'getItems',
value: function getItems() {
return this.items;
}
}]);
return Cart;
}();exports.Cart = Cart;
Run Code Online (Sandbox Code Playgroud)
Dan*_*non 17
Rollup是处理 ES6 模块的一个很好的打包器。它具有内置的原生 ES6 模块支持,因此与 Browserify 不同,它不需要使用 Babel。
这是一个使用 Rollup 的 Gulp 4 配置:
// gulp.js file in the root folder
var gulp = require('gulp');
var sourcemaps = require('gulp-sourcemaps');
var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');
var rollup = require('@rollup/stream');
// *Optional* Depends on what JS features you want vs what browsers you need to support
// *Not needed* for basic ES6 module import syntax support
var babel = require('@rollup/plugin-babel');
// Add support for require() syntax
var commonjs = require('@rollup/plugin-commonjs');
// Add support for importing from node_modules folder like import x from 'module-name'
var nodeResolve = require('@rollup/plugin-node-resolve');
// Cache needs to be initialized outside of the Gulp task
var cache;
gulp.task('js', function() {
return rollup({
// Point to the entry file
input: './app.js',
// Apply plugins
plugins: [babel(), commonjs(), nodeResolve()],
// Use cache for better performance
cache: cache,
// Note: these options are placed at the root level in older versions of Rollup
output: {
// Output bundle is intended for use in browsers
// (iife = "Immediately Invoked Function Expression")
format: 'iife',
// Show source code when debugging in browser
sourcemap: true
}
})
.on('bundle', function(bundle) {
// Update cache data after every bundle is created
cache = bundle;
})
// Name of the output file.
.pipe(source('bundle.js'))
.pipe(buffer())
// The use of sourcemaps here might not be necessary,
// Gulp 4 has some native sourcemap support built in
.pipe(sourcemaps.init({loadMaps: true}))
.pipe(sourcemaps.write('.'))
// Where to send the output file
.pipe(gulp.dest('./build/js'));
});
gulp.task('js:watch', function(done){
gulp.watch(['./source/**/*.js'], gulp.series('js'));
done();
})
gulp.task('default', gulp.series('js', 'js:watch'));
Run Code Online (Sandbox Code Playgroud)
Jas*_*onK 11
您需要一个像Webpack或Browserify这样的捆绑器才能使用ES6导入.Babel只能将ES6代码编译为ES5(原生JS).
Webpack和Browserify都为gulp制作了食谱:
希望这可以帮助.
小智 6
如果上述解决方案不适合您,请尝试gulp-include。
它使用类似于链轮或套筒的指令。指令是文件中的注释,gulp-include 将其识别为命令。
gulpfile.js:
const gulp = require('gulp')
const include = require('gulp-include')
exports.scripts = function (done) {
gulp.src('source/js/entry.js')
.pipe(include())
.on('error', console.log)
.pipe(gulp.dest('dist/js'))
}
Run Code Online (Sandbox Code Playgroud)
应用程序.js:
//=require ./js/cart.js
//=include ./js/cart.js
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13956 次 |
| 最近记录: |