【问题标题】:Laravel 5 extend Elixir to include browserifyLaravel 5 扩展 Elixir 以包含 browserify
【发布时间】:2015-05-10 16:39:17
【问题描述】:

我的 browserify 工作流程(从咖啡到 js,使用 browserify-shim 和 coffeeify)是这样的:

我有 2 个主要文件,app.coffee 和 _app.coffee,分别用于前端和后端。这两个文件都位于resources/coffee/front 和resources/coffee/back(分别)。我正在尝试在 laravel elixir 中包含 browserify 任务,因此结果文件将位于 public/js/app.js 和 public/js/_app.js 上,稍后可以修改为 build 文件夹。

到目前为止,我已经尝试通过在 elixir 的 node_modules ingredients 文件夹中创建一个 browserify.js 文件来扩展 elixir。内容是:

var gulp                =   require('gulp');
var browserify  = require('browserify');
var watchify        = require('watchify');
var source          =   require('vinyl-source-stream');
var logger          =   require('../../../gulp/util/bundleLogger');
var errors          =   require('../../../gulp/util/handleErrors');
var config          =   require('../../../gulp/config').browserify;

elixir.extend('browserify', function(callback) {
    var bundleQueue = config.bundleConfigs.length;
    var browserifyThis = function(bundleConfig) {
        var bundler = browserify({
            cache: {},
            packageCache: {},
            fullPaths: true,
            entries: bundleConfig.entries,
            extensions: config.extensions,
            debug: config.debug
        });

        var bundle = function() {
            logger.start(bundleConfig.outputName);

            return bundler
                .bundle()
                .on('error', errors)
                .pipe(source(bundleConfig.outputName))
                .pipe(gulp.dest(bundleConfig.dest))
                .on('end', finished);
        }

        if (global.isWatching) {
            bundler = watchify(bundler);
            bundler.on('update', bundle);
        }

        var finished = function() {
            logger.end(bundleConfig.outputName);
            if (bundleQueue) {
                bundleQueue--;
                if (bundleQueue === 0) {
                    callback();
                }
            }
        }

        return bundle();
    };

    config.bundleConfigs.forEach(browserifyThis);
});

browserify的配置是:

browserify: {
        debug: true,
        extensions: ['.coffee'],
        watch: './resources/assets/coffee/{front,back}/**/*.coffee',
        bundleConfigs: [
        {
            entries: './resources/assets/coffee/front/app.coffee',
            dest: './public/js',
            outputName: 'app.js'
        },
        {
            entries: './resources/assets/coffee/back/app.coffee',
            dest:  './public/js',
            outputName: '_app.js'
        }]
    }

然后在我的 gulp elixir 任务中,我这样做:

var gulp        =   require('gulp');
var elixir  = require('laravel-elixir');

gulp.task('elixir', function() {
    return elixir(function(mix) {
        mix.sass('app.scss').browserify().version(['.public/css/app.css', './public/js/app.js', '.public/js/_app.js']);
    });
});

这不起作用,因为 callback 函数不包含在 elixir 中(最初是 gulp 的)。即使是这样,elixir watch 也不会收听我原来的.coffee 文件(我正在尝试查看位于resources/coffee/**/*.coffee 的整个咖啡文件)。

所以我认为的解决方案是如果文件发生更改,则重新运行整个 elixir 程序,例如:

gulp.task('default', function() {
    runSequence('coffeelint', 'browserify', 'elixir', 'images', 'watch');
});

还有我的watch 任务:

gulp.task('watch', function() {
    gulp.watch(config.browserify.watch, ['coffeelint', 'default']);
    gulp.watch(config.images.src, ['images']);
});

但错误是,它说 elixir 中的 sass() 函数无法链接到 browserify()。知道怎么做吗?

【问题讨论】:

    标签: javascript node.js coffeescript laravel-5 laravel-elixir


    【解决方案1】:

    你不能将它们结合起来,但你可以同时运行它们。

    //gulp.js in the root folder
    var elixir = require('laravel-elixir');
    
    var browserify  = require('browserify');
    
    elixir(function(mix) {
    
        mix.sass(['app.scss'], 'public/css');
    });
    
    elixir(function(mix) {
    
        mix.browserify(['app.js'], 'public/js');
    });
    

    【讨论】:

      【解决方案2】:

      Laravel elixir 与 browserify 捆绑在一起,因此无需对 browserify 进行要求,您可以做的是

      elixir(function(mix) {
          mix.browserify(['main.js'], 
                          'output directory',
                          'base-directory-if-different-from-public-folder');
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 2018-06-08
        • 2016-09-16
        • 1970-01-01
        • 2018-11-26
        • 2015-12-03
        • 2015-04-27
        相关资源
        最近更新 更多