├── .gitignore ├── README.md ├── index.js └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | /.idea -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Laravel Elixir Browserify 2 | ========================= 3 | 4 | [![Version](https://img.shields.io/npm/v/laravel-elixir-browserify.svg)](https://www.npmjs.com/package/laravel-elixir-browserify) 5 | [![Dependencies](https://img.shields.io/david/skrajewski/laravel-elixir-browserify.svg)](https://david-dm.org/skrajewski/laravel-elixir-browserify) 6 | 7 | Highly customizable __browserify__ extension for _laravel elixir_. Includes support for transforms, __watchify__ and __multiple bundles__. 8 | 9 | ## ❗️❗️ IMPORTANT NOTE ❗️❗️ 10 | Work to this package was abadonded. No further updates will be perfomed. Consider use the [official package](https://www.npmjs.com/package/laravel-elixir-browserify-official). Thanks for all contributors for their support. 11 | 12 | -------------- 13 | 14 | - [Install](#install) 15 | - [Usage](#usage) 16 | - [Example *Gulpfile.js*:](#example-gulpfilejs) 17 | - [Advanced example](#advanced-example) 18 | - [Watchify](#watchify) 19 | - [Multiple bundles](#multiple-bundles) 20 | - [Custom task name](#custom-task-name) 21 | - [Changelog](#changelog) 22 | - [License](#license) 23 | 24 | ## Install 25 | 26 | ``` 27 | npm install --save-dev laravel-elixir-browserify 28 | ``` 29 | 30 | ## Usage 31 | 32 | ### Example *Gulpfile.js*: 33 | 34 | ```javascript 35 | var elixir = require('laravel-elixir'); 36 | var browserify = require('laravel-elixir-browserify'); 37 | 38 | elixir(function(mix) { 39 | // make sure this line is inside of elixir callback function 40 | // to replace default browserify task 41 | browserify.init(); 42 | 43 | mix.browserify("bootstrap.js"); 44 | }); 45 | ``` 46 | 47 | First argument is the entry point of your application _(default directory is resources/assets/js)_. In second argument you could pass plugin options and browserify options. 48 | 49 | ### Advanced example 50 | ```javascript 51 | var elixir = require('laravel-elixir'); 52 | var browserify = require('laravel-elixir-browserify'); 53 | 54 | elixir(function(mix) { 55 | browserify.init(); 56 | 57 | mix.browserify("bootstrap.js", { 58 | debug: true, 59 | insertGlobals: true, 60 | transform: ["debowerify"], 61 | output: "public/js", 62 | rename: "bundle.js" 63 | }); 64 | }); 65 | ``` 66 | 67 | ### Watchify 68 | If you want to use _watchify_ for _browserify_ just run `gulp watchify` instead of standard `gulp watch` command. Elixir's watch task is a dependency of watchify and will also be run. 69 | 70 | ```javascript 71 | var elixir = require('laravel-elixir'); 72 | var browserify = require('laravel-elixir-browserify'); 73 | 74 | elixir(function(mix) { 75 | browserify.init(); 76 | 77 | mix.browserify("bootstrap.js"); 78 | }); 79 | ``` 80 | 81 | ### Multiple bundles 82 | ```javascript 83 | var elixir = require('laravel-elixir'); 84 | var browserify = require('laravel-elixir-browserify'); 85 | 86 | elixir(function(mix) { 87 | browserify.init(); 88 | 89 | mix.browserify("admin.js") 90 | .browserify("app.js", { transform: ["reactify"] }) 91 | }); 92 | ``` 93 | 94 | ### Custom task name 95 | Laravel Elixir has own _browserify_ task, but this plugin replaced him. If you want to use both tasks or maybe you want to rename it you can pass _name_ argument to the `init(name)` method. 96 | 97 | ```javascript 98 | var elixir = require('laravel-elixir'); 99 | require('laravel-elixir-browserify').init("bundler"); 100 | 101 | elixir(function(mix) { 102 | mix.bundler("bootstrap.js"); 103 | }); 104 | ``` 105 | 106 | ## Changelog 107 | __0.8.1__ 108 | - Updated _browserify_ 109 | 110 | __0.8.0__ 111 | - Resolved conflicts with _browserify_ elixir task 112 | - Better watchify integration 113 | 114 | __0.7.0__ 115 | - Added multiple bundles support (thanks for @Daveawb) 116 | - Added watchify support (thanks for @Daveawb) 117 | 118 | __0.6.0__ 119 | - Removed second argument (*destination directory*) and add *output* option. 120 | - Fixed browserify transforms (*vinyl-transform* replaced by *vinyl-source-stream* and *vinyl-buffer*) 121 | 122 | __0.5.0__ 123 | - Default bundle file has the same name as input file. Use *rename* option to change it. 124 | 125 | __0.4.1__ 126 | - Renamed the helpers *folder* to *commands* 127 | 128 | __0.4.0__ 129 | - Replace blacklisted *gulp-browserify* with *browserify* and *vinyl-transform* packages (thanks for @JoeCianflone). 130 | - Removed default *debowerify* transform. 131 | 132 | ## License 133 | The MIT License. Copyright (c) 2015 - 2017 by Szymon Krajewski and many contributors. 134 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'), 2 | elixir = require('laravel-elixir'), 3 | config = elixir.config, 4 | inSequence = require('run-sequence'), 5 | utilities = require('laravel-elixir/ingredients/commands/Utilities'), 6 | notifications = require('laravel-elixir/ingredients/commands/Notification'), 7 | gulpIf = require('gulp-if'), 8 | uglify = require('gulp-uglify'), 9 | rename = require('gulp-rename'), 10 | source = require('vinyl-source-stream'), 11 | buffer = require('vinyl-buffer'), 12 | browserify = require('browserify'), 13 | watchify = require('watchify'), 14 | _ = require('underscore'); 15 | 16 | var initializePlugin = function(taskName) { 17 | taskName = taskName || "browserify"; 18 | 19 | /** 20 | * Create the Gulp task. 21 | */ 22 | var buildTask = function() { 23 | var stream; 24 | 25 | gulp.task(taskName, function() { 26 | var onError = function(e) { 27 | new notifications().error(e, 'Browserify Compilation Failed!'); 28 | this.emit('end'); 29 | }; 30 | 31 | var bundle = function(b, instance) { 32 | return b.bundle() 33 | .on('error', onError) 34 | .pipe(source(instance.src.split("/").pop())) 35 | .pipe(buffer()) 36 | .pipe(gulpIf(!instance.options.debug, uglify())) 37 | .pipe(gulpIf(typeof instance.options.rename === 'string', rename(instance.options.rename))) 38 | .pipe(gulp.dest(instance.options.output)); 39 | }; 40 | 41 | config.toBrowserify.forEach(function(instance) { 42 | var b = browserify(instance.src, instance.options); 43 | 44 | if (config.useWatchify) { 45 | b = watchify(b); 46 | 47 | b.on('update', function() { 48 | bundle(b, instance); 49 | }); 50 | } 51 | 52 | stream = bundle(b, instance); 53 | }); 54 | 55 | return stream.pipe(new notifications().message('Browserified!'));; 56 | }); 57 | }; 58 | 59 | /** 60 | * Create elixir extension 61 | */ 62 | elixir.extend(taskName, function (src, options) { 63 | if (!_.isArray(config.toBrowserify)) { 64 | config.toBrowserify = []; 65 | } 66 | 67 | options = _.extend({ 68 | debug: ! config.production, 69 | rename: null, 70 | srcDir: config.assetsDir + 'js', 71 | output: config.jsOutput, 72 | transform: [], 73 | insertGlobals: false 74 | }, options); 75 | 76 | config.toBrowserify.push({ 77 | src : "./" + utilities.buildGulpSrc(src, options.srcDir), 78 | options: options 79 | }); 80 | 81 | buildTask(); 82 | 83 | this.registerWatcher(taskName, options.srcDir + '/**/*.js', config.useWatchify ? 'nowatch' : 'default'); 84 | 85 | return this.queueTask(taskName); 86 | }); 87 | 88 | /** 89 | * Watching changes with watchify 90 | */ 91 | gulp.task('watchify', function() { 92 | config.useWatchify = true; 93 | 94 | srcPaths = config.watchers.default; 95 | tasksToRun = _.intersection(config.tasks, _.keys(srcPaths).concat('copy')); 96 | 97 | inSequence.apply(this, tasksToRun.concat('watch-assets')); 98 | }); 99 | }; 100 | 101 | module.exports = { 102 | init: initializePlugin 103 | }; 104 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "laravel-elixir-browserify", 3 | "version": "0.8.1", 4 | "description": "Laravel Elixir Browserify Extension", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "laravel", 11 | "elixir", 12 | "browserify", 13 | "watchify", 14 | "gulp" 15 | ], 16 | "author": { 17 | "name": "Szymon Krajewski " 18 | }, 19 | "license": "MIT", 20 | "dependencies": { 21 | "browserify": "^10.1.0", 22 | "gulp-if": "^1.2.5", 23 | "gulp-notify": "^2.0.0", 24 | "gulp-rename": "^1.2.0", 25 | "gulp-uglify": "^1.0.1", 26 | "underscore": "^1.7.0", 27 | "vinyl-buffer": "^1.0.0", 28 | "vinyl-source-stream": "^1.0.0", 29 | "watchify": "~3.2.0", 30 | "run-sequence": "~1.1.0" 31 | }, 32 | "devDependencies": {}, 33 | "repository": { 34 | "type": "git", 35 | "url": "https://github.com/skrajewski/laravel-elixir-browserify" 36 | }, 37 | "bugs": { 38 | "url": "https://github.com/skrajewski/laravel-elixir-browserify/issues" 39 | }, 40 | "homepage": "https://github.com/skrajewski/laravel-elixir-browserify" 41 | } 42 | --------------------------------------------------------------------------------