I have a library lib.js
that I want to create from lib/a.js
and lib/b.js
and to be able to use it from a script client.js
using var a = require('lib/a.js');
and that it works when I just include the compiled lib.js
library before client.js
(therefore, lib.js
has to declare a require
function that knows about lib/a.js
)
I guess I have to use external
and alias
but I am not sure what is the proper way to do it
Also, is it possible to have a Gulp file that creates all the alias automatically for the folders in my library? eg. creates an alias for all the files in the lib/
dir?
For instance, if our focus is only coding, we might need a task runner and in such cases, gulp. js is a better pick for us. On the other hand, if all we need to do is configure and tweak, perhaps a module binder such as webpack is more apt for our needs.
CSS and HTML files are used, and it finds the code easily in the entire application. Gulp can manage only a single application, and it is never a replacement for Webpack, whereas Webpack can be used as a replacement for Gulp. As both uses JavaScript, users will not feel different while migrating from Gulp to Webpack.
It's no longer necessary with tools like create-react-app and next-js. Gulp used to make sense before Webpack and React. You needed to process files, build your project, and have a functioning web server (BrowserSync) that refreshes the browser when you make changes.
Browserify solves the problems of having too many JS files referenced in your HTML, inability to use Node modules in the browser, and inability to reference your own modules in your own code. Watchify streamlines the process of bundling your files and will make a change every time you change a JS file in your project.
Here are a couple of gulp tasks that would help to build your common lib.js and the client.js bundles separately.
Note that you have to tell browserify to b.require() lib/*.js when bundling lib.js, and you have to tell it to b.external() the libraries that will be loaded separately when bundling client.js
var path = require('path');
var gulp = require('gulp');
var browserify = require('browserify');
var concat = require('gulp-concat');
var transform = require('vinyl-transform');
gulp.task('build-lib', function () {
// use `vinyl-transform` to wrap around the regular ReadableStream returned by b.bundle();
// so that we can use it down a vinyl pipeline as a vinyl file object.
// `vinyl-transform` takes care of creating both streaming and buffered vinyl file objects.
var browserified = transform(function(filename) {
// basename, for eg: 'a.js'
var basename = path.basename(filename);
// define the exposed name that your client.js would use to require();
// for eg: require('lib/a.js'); // -> exposed name should be 'lib/a.js'
var expose = 'lib/' + basename;
return browserify(filename)
.require(filename, { expose: expose})
.bundle();
});
return gulp.src(['./lib/*.js'])
.pipe(browserified)
.pipe(concat('lib.js'))
.pipe(gulp.dest('./dist'));
});
gulp.task('build-client', function () {
var browserified = transform(function(filename) {
// filename = './client.js'
// let browserify know that lib/a.js and and lib/b.js are external files
// and will be loaded externally (in your case, by loading the bundled lib.js
// for eg: <script src='dist/lib.js'>)
return browserify(filename)
.external('lib/a.js')
.external('lib/b.js')
.bundle();
});
return gulp.src(['./client.js'])
.pipe(browserified)
.pipe(gulp.dest('./dist'));
});
gulp.task('default', ['build-lib', 'build-client']);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With