Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
atomify-js
Advanced tools
Atomic JavaScript - Reusable front-end modules using Browserify, transforms, and templates
Atomic JavaScript - Reusable front-end modules using Browserify, transforms, and templates
atomify-js is a tool that makes it easy to create small, atomic modules of client-side code. It provides support for several templating libraries and Browserify transforms out of the box while allowing for ample customization. It also provides several convenience features to make working with Browserify even easier.
Table of Contents generated with DocToc
npm install atomify-js
fs.readFileSync()
static asset inliner.jsx
files.In its default form, atomify-js takes an opts
object and a callback
function.
Path or paths that will be provided to Browserify as entry points. For convenience, you may simply provide a string or array of strings in place of the opts
object, which will be treated as the entry
or entries
property, respectively. Paths will be resolved relative to process.cwd()
.
If you have multiple entries, you can set this to true
to enable factor-bundle, which will take the common dependencies of all entries and move them to a common bundle. If you use this option, the api changes a little bit.
If using a callback, you're passed an object that with keys of each entry file and values of the compiled JS file. You'll also have a common
key.
var js = require('atomify-js')
, path = require('path')
js({
entries [path.join(__dirname, 'entry1.js'), path.join(__dirname, 'entry2.js')]
, common: true
}, function(err, entries){
console.log(entries['entry1'].toString())
console.log(entries['entry2'].toString())
console.log(entries['common'].toString())
})
If piping the response, you'll be pipped the common bundle. You'll need to listen to the 'entry'
event to get the compiled entry files.
var js = require('atomify-js')
, path = require('path')
js({
entries [path.join(__dirname, 'entry1.js'), path.join(__dirname, 'entry2.js')]
, common: true
}).pipe(commonStream)
js.emitter.on('entry', function(content, bundleName){
console.log(bundleName, content.toString())
})
If you simply want your bundle written out to a file, provide the path in this property. Path will be resolved relative to process.cwd()
.
Passed to Browserify to generate source maps if true
. Also provides additional CLI output, if applicable.
If true
, minifies source code and sets debug to true. If object, passed as options to minifyify and sets debug to true. If false
, no minification.
If true
, watchify will be used to create a file watcher and speed up subsequent builds.
If truthy, will use browserify-incremental to cache the result of a build. This can give you dramatically faster build times if you're not using opts.watch
.
If opts.cache
is a string, it will be used as the file path to save the cache file to.
NOTE: opts.cache
and opts.watch
are incompatible. An error will be thrown if you set both.
Provide your own transforms that will be added to the defaults listed above.
If set to false
, the default list of transforms will not be run. This is useful if you'd like to customize a default transform, or simply don't need them to run.
Browserify global transforms that will process all files used in your application, including those within node_modules
. You should take great care when defining global transforms as noted in the Browserify documentation.
Array of files to pass to Browserify's require
method.
Array of files to pass to Browserify's external
method.
One of the challenges with writing truly modular code is that your templates often refer to assets that need to be accessible from your final bundle. Configuring this option solves that problem by detecting asset paths in your templates, copying them to a new location, and rewriting the references to them to use the new paths. Paths in the src
attribute of img
, video
, and audio
tags will be processed according to your configuration.
The processing is configured using two sub-properties of opts.assets: dest
and prefix
. The dest
field determines the location files will be copied to, relative to process.cwd()
, and prefix
specifies what will be prepended to the new file names in the rewritten src
attributes. The filenames are generated from a hash of the assets themselves, so you don't have to worry about name collisions.
To demonstrate, see the following example.
// config
{
entry: './entry.js',
output: 'dist/bundle.js',
...
assets: {
dest: 'dist/assets',
prefix: 'assets/'
}
}
<img src="some/path/to/logo.png">
becomes
<img src="assets/4314d804f81c8510.png">
and a copy of logo.png will now exist at dist/assets/4314d804f81c8510.png
You may also provide any valid browserify bundle options in the opts
object as well, and they will be passed directly to Browserify.
Standard Browserify bundle callback with cb(err, src)
signature. Not called if opts.output
is specifed. If callback
is provided as a string rather than function reference it will be used as the opts.output
file path.
If opts.watch
is truthy, the callback will be called on every file change
The emitter
property will emit events.
var js = require('atomify-js')
js('./entry.js', './bundle.js')
js.emitter.on('browserify', function setBrowserifyInstance(b){
console.log(b)
})
(<browserifyInstance> bundle)
When the browserify instance is created, emits it. This might be useful to you, but it's really just for testing.
(<watchifyInstance> bundle)
When the watchify instance is created, emits it. This might be useful to you, but it's really just for testing.
(<String> id)
Emitted when watchify detects a file change. Passes the bundle id that changed.
(<Number> time)
If opts.watch
is truthy, this is emitted when the bundle changes. time
is the re-compilation time.
(<Object> package)
Proxies the package event from browserify.
(<Buffer> entryBuffer, <String> entryName)
If opts.common
is truthy, this will be emitted when an entry file is bundled. entryBundle
is the contents of the entry file in buffer form. entryName
is the file name of the original entry file.
// entry.js
var thing = require('thing')
, template = require('./template.html.hbs')
template({param: 'param'})
// build.js
var js = require('atomify-js')
var opts = {
entry: './entry.js'
, debug: true // default: `false`
}
js(opts, function (err, src) {
// do something with the src
})
OR
var js = require('atomify-js')
js('./entry.js', './bundle.js')
Tests can be run with npm test
. You can run the tests on every file change with npm run tdd
.
4.7.3
FAQs
Atomic JavaScript - Reusable front-end modules using Browserify, transforms, and templates
We found that atomify-js demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.