fs.readFileSync() and fs.readFile() static asset browserify transform
This module is a plugin for browserify to parse the AST for fs.readFileSync()
calls so that you can inline file contents into your bundles.
Even though this module is intended for use with browserify, nothing about it is particularly specific to browserify so it should be generally useful in other projects.
examplefor a main.js:
var fs = require('fs');
var html = fs.readFileSync(__dirname + '/robot.html', 'utf8');
console.log(html);
and a robot.html:
<b>beep boop</b>
first npm install brfs
into your project, then:
$ browserify -t brfs example/main.js > bundle.js
now in the bundle output file,
var html = fs.readFileSync(__dirname + '/robot.html', 'utf8');
turns into:
or with the apivar html = "<b>beep boop</b>\n";
asyncvar browserify = require('browserify');
var fs = require('fs');
Â
var b = browserify('example/main.js');
b.transform('brfs');
Â
b.bundle().pipe(fs.createWriteStream('bundle.js'));
You can also use fs.readFile()
:
var fs = require('fs');
fs.readFile(__dirname + '/robot.html', 'utf8', function (err, html) {
    console.log(html);
});
When you run this code through brfs, it turns into:
methodsvar fs = require('fs');
process.nextTick(function () {(function (err, html) {
    console.log(html);
})(null,"<b>beep boop</b>\n")});
brfs looks for:
fs.readFileSync(pathExpr, enc=null)
fs.readFile(pathExpr, enc=null, cb)
fs.readdirSync(pathExpr)
fs.readdir(pathExpr, cb)
Inside of each pathExpr
, you can use statically analyzable expressions and these variables and functions:
__dirname
__filename
path
if you var path = require('path')
firstrequire.resolve()
Just like node, the default encoding is null
and will give back a Buffer
. If you want differently-encoded file contents for your inline content you can set enc
to 'utf8'
, 'base64'
, or 'hex'
.
In async mode when a callback cb
is given, the contents of pathExpr
are inlined into the source inside of a process.nextTick()
call.
When you use a 'file'
-event aware watcher such as watchify, the inlined assets will be updated automatically.
If you want to use this plugin directly, not through browserify, the api follows.
var tr = brfs(file, opts)var brfs = require('brfs')
Return a through stream tr
inlining fs.readFileSync()
file contents in-place.
Optionally, you can set which opts.vars
will be used in the static argument evaluation in addition to __dirname
and __filename
.
opts.parserOpts
can be used to configure the parser brfs uses, acorn.
For every file included with fs.readFileSync()
or fs.readFile()
, the tr
instance emits a 'file'
event with the file
path.
A tiny command-line program ships with this module to make debugging easier.
usage:
brfs file
Inline `fs.readFileSync()` calls from `file`, printing the transformed file
contents to stdout.
brfs
brfs -
Inline `fs.readFileSync()` calls from stdin, printing the transformed file
contents to stdout.
install
With npm do:
npm install brfs
then use -t brfs
with the browserify command or use .transform('brfs')
from the browserify api.
Since brfs
evaluates your source code statically, you can't use dynamic expressions that need to be evaluated at run time. For example:
var file = window.someFilePath;
var str = require('fs').readFileSync(file, 'utf8');
Instead, you must use simpler expressions that can be resolved at build-time:
var str = require('fs').readFileSync(__dirname + '/file.txt', 'utf8');
Another gotcha: brfs
does not yet support ES module import
statements. See brfs-babel for an experimental replacement that supports this syntax.
MIT
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4