如何与laravel和browserfy一起使用es*-垫片

How to use use es*-shims with laravel and browserify?

本文关键字:es 垫片 一起 laravel browserfy      更新时间:2023-09-26

让我们考虑一下这个gulpfile.js:

var elixir = require('laravel-elixir');
elixir(function(mix) {
    mix.coffee(['1.coffee', '2.coffee'], 'storage/app')
      .browserify('app.js', null, 'storage/app')
});

现在我想在这里添加一些垫片。据我所知,他们不会回报什么,他们改变了环境。这让我觉得它们必须在任何其他代码之前运行。

我可以把require('es5-shim'); require('es6-shim'); require('es7-shim');放在第一个文件的开头。但我不喜欢这个主意,因为我最终可能会改变订单,它就会停止工作。我不确定,他们是否保证按照我指定的顺序来。

那么,我该如何准备文件呢?或者你们是怎么处理的?

我想到了什么:

var elixir = require('laravel-elixir')
    gulp = require('gulp'),
    concat = require('gulp-concat')
    fs = require('fs');
elixir.extend('inlineTask', function(func, watcher) {
    var task = new elixir.Task(func.name, func);
    if (watcher) {
        task.watch(watcher);
    }
});
elixir(function(mix) {
    mix.coffee('**/*.coffee', 'storage/app/app.js')
        .browserify('app.js', 'storage/app/bundle.js', 'storage/app')
        .inlineTask(function bundleJs() {
            return gulp.src([
                    'node_modules/es5-shim/es5-shim.js',
                    'storage/app/bundle.js'])
                .pipe(elixir.Plugins.if(elixir.config.sourcemaps, elixir.Plugins.sourcemaps.init({loadMaps: true})))
                .pipe(concat('bundle.js'))
                .pipe(elixir.Plugins.if(elixir.config.sourcemaps, elixir.Plugins.sourcemaps.write('.')))
                .pipe(gulp.dest('public/js'));
        }, 'storage/app/bundle.js')
        .version('js/bundle.js');
});

但请注意,在运行gulp watch时,任务不会按照它们在gulpfile.js中指定的顺序运行。因此在此之前,只运行gulp是有意义的。

此外,gulp(或者应该说laravel-elixir)并不总是检测到新文件。据推测,当源文件模式与任何文件都不匹配时,当运行gulp时。