What is insert-module-globals?
The insert-module-globals npm package is used to insert global variables into the scope of a module. This is particularly useful for browserify transforms, allowing you to inject variables like __filename, __dirname, process, Buffer, and global into your modules.
What are insert-module-globals's main functionalities?
Injecting __filename
This feature allows you to inject the __filename variable into your module's scope. The code sample demonstrates how to use the insert-module-globals package with browserify to transform a file and insert the __filename variable.
const insertGlobals = require('insert-module-globals');
const through = require('through2');
const b = browserify();
b.transform(function (file) {
return through(function (buf, enc, next) {
this.push(insertGlobals(file, buf.toString('utf8')));
next();
});
});
Injecting __dirname
This feature allows you to inject the __dirname variable into your module's scope. The code sample demonstrates how to use the insert-module-globals package with browserify to transform a file and insert the __dirname variable.
const insertGlobals = require('insert-module-globals');
const through = require('through2');
const b = browserify();
b.transform(function (file) {
return through(function (buf, enc, next) {
this.push(insertGlobals(file, buf.toString('utf8')));
next();
});
});
Injecting process
This feature allows you to inject the process variable into your module's scope. The code sample demonstrates how to use the insert-module-globals package with browserify to transform a file and insert the process variable.
const insertGlobals = require('insert-module-globals');
const through = require('through2');
const b = browserify();
b.transform(function (file) {
return through(function (buf, enc, next) {
this.push(insertGlobals(file, buf.toString('utf8')));
next();
});
});
Injecting Buffer
This feature allows you to inject the Buffer variable into your module's scope. The code sample demonstrates how to use the insert-module-globals package with browserify to transform a file and insert the Buffer variable.
const insertGlobals = require('insert-module-globals');
const through = require('through2');
const b = browserify();
b.transform(function (file) {
return through(function (buf, enc, next) {
this.push(insertGlobals(file, buf.toString('utf8')));
next();
});
});
Injecting global
This feature allows you to inject the global variable into your module's scope. The code sample demonstrates how to use the insert-module-globals package with browserify to transform a file and insert the global variable.
const insertGlobals = require('insert-module-globals');
const through = require('through2');
const b = browserify();
b.transform(function (file) {
return through(function (buf, enc, next) {
this.push(insertGlobals(file, buf.toString('utf8')));
next();
});
});
Other packages similar to insert-module-globals
envify
Envify is a browserify transform that replaces occurrences of process.env.NODE_ENV with the value of NODE_ENV. It is useful for injecting environment variables into your modules, similar to how insert-module-globals injects global variables.
browserify-shim
Browserify-shim is a browserify transform that allows you to shim non-CommonJS modules to work with browserify. It can be used to inject global variables and dependencies into your modules, similar to insert-module-globals.
exposify
Exposify is a browserify transform that allows you to expose global variables to your modules. It is similar to insert-module-globals in that it helps you manage global variables within your browserify bundles.
insert-module-globals
insert implicit module globals
(__filename
, __dirname
, process
, global
, and Buffer
)
into a module bundle stream generated by
module-deps
example
var mdeps = require('module-deps');
var bpack = require('browser-pack');
var insert = require('insert-module-globals');
var files = [ __dirname + '/files/main.js' ];
mdeps(files)
.pipe(insert(files))
.pipe(bpack({ raw: true }))
.pipe(process.stdout)
;
$ node example/insert.js | node
in main.js: {"__filename":"/main.js","__dirname":"/"}
in foo/index.js: {"__filename":"/foo/index.js","__dirname":"/foo"}
or use the command-line scripts:
$ module-deps main.js | insert-module-globals main.js | browser-pack | node
in main.js: {"__filename":"/main.js","__dirname":"/"}
in foo/index.js: {"__filename":"/foo/index.js","__dirname":"/foo"}
methods
var insertGlobals = require('insert-module-globals')
var insert = insertGlobals(files, opts)
Insert globals for an array of entry files
. The files
array is used to
rebase the __filename
and __dirname
names or you can pass in an
opts.basedir
explicitly.
You can pass in a custom opts.resolve(id, parent, cb)
function. By default
browser-resolve is used for
the opts.resolve
.
When opts.always
is truthy, wrap every file with all the global variables
without parsing. This is handy because parsing the scope can take a long time,
so you can prioritize fast builds over saving bytes in the final output.
You can use a custom opts.commondir
parameter to use a custom normalization
for __dirname and __filename resolving or false
to turn normalization off.
Return a through stream insert
that expects input from the format written by
module-deps. The insert
stream will
output data that can be fed into
browser-pack.
usage
usage: insert-module-globals [files]
install
With npm, to get the library do:
npm install insert-module-globals
and to get the bin script do:
npm install -g insert-module-globals
insert custom globals.
insert-module-globals
can also insert arbitary globals into files.
Pass in an object of functions as the vars
option.
var vars = {
process: function (row, basedir) {
return {
id: "path/to/custom_process.js",
source: customProcessContent
}
},
Buffer: function (row, basedir) {
return {
id: "path/to/custom_buffer.js,
source: customProcessContent,
//suffix is optional
//it's used to extract the value from the module.
//it becomes: require(...).Buffer in this case.
suffix: '.Buffer'
}
},
Math: function () {
//if you return a string,
//it's simply set as the value.
return '{}'
//^ any attempt to use Math[x] will throw!
}
}
mdeps(files)
.pipe(insert(files, {vars: vars}))
.pipe(bpack({ raw: true }))
.pipe(process.stdout)
license
MIT