2.1.0 • Published 7 years ago

node-module-concat v2.1.0

Weekly downloads
41
License
MIT
Repository
github
Last release
7 years ago

node-module-concat

Fairly lightweight CommonJS module concatenation tool

What is it?

This library exposes a single function and stream API that concatenates CommonJS modules within a project. This can be used to obfuscate an entire project into a single file. It can also be used to write client-side JavaScript code where each file is written just like a Node.js module.

Why?

Because projects like Webpack and Browserify are cool, but they are a little heavy for my taste. I just wanted something to compile CommonJS modules into a single JavaScript file. This project has one dependency: resolve

Install

npm install node-module-concat

Usage

var modConcat = require("node-module-concat");
var outputFile = "./project/concatenated.js";
modConcat("./project/index.js", outputFile, function(err, stats) {
	if(err) throw err;
	console.log(stats.files.length + " were combined into " + outputFile);
});

API

var modConcat = require("node-module-concat");

var stream = new modConcat.ModuleConcatStream(entryModulePath [, options])

Constructs a Readable Stream of the concatenated project.

  • entryModulePath - the path to the entry point of the project to be concatenated. This might be an index.js file, for example.
  • options - object to specify any of the following options: - outputPath - the path where the concatenated project file will be written. Provide this whenever possible to ensure that instances of __dirname and __filename are replaced properly. If __dirname and __filename are not used in your project or your project dependencies, it is not necessary to provide this path. This has no effect when the browser option is set. - excludeFiles - An Array of files that should be excluded from the project even if they were referenced by a require(...).

    		Note: These `require` statements should probably be wrapped with a
    		conditional or a try/catch block to prevent uncaught exceptions.
    	- `excludeNodeModules` - (boolean or Array) Set to `true` if all modules
    		loaded from `node_modules` folders should be excluded from the project.
    		Alternatively, set to an Array of module names to be excluded from the
    		project.
    
    		For example, `require("foobar")` will not be replaced if
    		`excludeNodeModules` is set to an Array containing `"foobar"` or if
    		`excludeNodeModules` is set to `true`.
    	- `extensions` - An Array of extensions that will be appended to the
    		required module path to search for the module in the file system.
    		Defaults to `[".js", ".json"]`.
    
    		For example, `require("./foo")` will search for:
    		- `./foo`
    		- `./foo.js`
    		- `./foo.json`
    		in that order, relative to the file containing the require statement.
    
    		Another example, `require("./foo.js")` will search for:
    		- `./foo.js`
    		- `./foo.js.js`
    		- `./foo.js.json`
    
    		**Note**: ".node" file extensions are considered to be native C/C++
    		addons and are always excluded from the build.
    	- `compilers` - An Object describing how files with certain file extensions
    		should be compiled to JavaScript before being included in the project.
    		The example below will allow node-module-concat to handle `require`
    		statements pointing to *.coffee files (i.e. `require("./foo.coffee")`).
    		These modules are compiled using the coffee-script compiler before
    		they are included in the project.
    		```javascript
    		{
    			".coffee": (src, options) => require("coffee-script").compile(src)
    		}
    		```
    		`options` are passed along to the compiler function, as shown above.
    
    		**Note**: By default, ".json" files are prepended with
    		`module.exports = `.  This behavior can be overwritten by explicitly
    		specifying the ".json" key in the `compilers` Object.
    
    		**Note**: By default, the file extensions specified in `compilers` are
    		not added to the `extensions` option, so `require("./foo")` will not
    		find `./foo.coffee` unless ".coffee" is explicitly added to `extensions`
    		(see above).
    	- `browser` - Set to `true` when concatenating this project for the
    		browser.  In this case, whenever a required library is loaded from
    		`node_modules`, the `browser` field in the `package.json` file (if
    		found) is used to determine which file to actually include in the
    		project.
    	- `allowUnresolvedModules` - Set to `true` to prevent unresolved modules
    		from throwing an Error; instead, the `require(...)` expression will not
    		be replaced, and the unresolved module will be added to
    		`stats.unresolvedModules` (see below).  Defaults to `false`.
    	- Any [option supported by resolve.sync]
    		(https://github.com/substack/node-resolve#resolvesyncid-opts) except
    		`basedir` and `packageFilter`, which can be overwritten.
    	- Any [option supported by the Readable class]
    		(https://nodejs.org/api/stream.html#stream_new_stream_readable_options)

stream.getStats()

Returns an Object containing statistics about the files included in the project. This object is available after the 'end' event is fired and there is no more data to consume. Properties include:

  • files - An Array of files included in the project
  • addonsExcluded - An Array of files excluded from the project because they are native C/C++ add-ons.
  • unresolvedModules - An Array of modules that could not be included in the project because they could not be found. Each element in the Array is an Object containing these properties: - parent - the full path of the file containing the require expression - module - the name or path to the module that could not be found

modConcat(entryModule, outputPath, [options, cb])

Helper function that constructs a new ModuleConcatStream (see above) with the following options and pipes the concatenated project to the outputPath.

  • entryModule - the path to the entry point of the project to be concatenated. This might be an index.js file, for example.
  • outputFile - the path where the concatenated project file will be written.
  • options - See options for ModuleConcatStream above.
  • cb - Callback of the form cb(err, stats). If no callback is provided, a Promise is returned instead, which resolves to the stats Object returned by stream.getStats() (see above).

Known limitations

  • Dynamic require() statements don't work (i.e. require("./" + variable))
  • require.resolve calls are not modified
  • require.cache statements are not modified
2.1.0

7 years ago

2.0.0

7 years ago

2.0.0-beta

7 years ago

1.5.0

7 years ago

1.4.0

8 years ago

1.3.0

8 years ago

1.2.0

8 years ago

1.1.1

9 years ago

1.1.0

9 years ago

1.0.2

9 years ago

1.0.1

9 years ago

1.0.0

9 years ago