107 lines
3.1 KiB
Markdown
107 lines
3.1 KiB
Markdown
Overview [](https://travis-ci.org/lydell/source-map-concat)
|
||
========
|
||
|
||
Concatenate files with source maps.
|
||
|
||
```js
|
||
var fs = require("fs")
|
||
var path = require("path")
|
||
var concat = require("source-map-concat")
|
||
|
||
var resolveSourceMapSync = require("source-map-resolve").resolveSourceMapSync
|
||
var createDummySourceMap = require("source-map-dummy")
|
||
|
||
var jsFiles = ["foo.js", "subdir/bar.js", "../baz.js"]
|
||
|
||
jsFiles = jsFiles.map(function(file) {
|
||
return {
|
||
source: file,
|
||
code: fs.readFileSync(file).toString()
|
||
}
|
||
})
|
||
jsFiles.forEach(function(file) {
|
||
var previousMap = resolveSourceMapSync(file.code, file.source, fs.readFileSync)
|
||
if (previousMap) {
|
||
file.map = previousMap.map
|
||
file.sourcesRelativeTo = previousMap.sourcesRelativeTo
|
||
} else {
|
||
file.map = createDummySourceMap(file.code, {source: file.source, type: "js"})
|
||
}
|
||
})
|
||
|
||
function wrap(node, file) {
|
||
node.prepend("void function(){\n// File: " + file.source + "\n")
|
||
node.add("}();")
|
||
}
|
||
|
||
var output = "subdir/bundle.js"
|
||
|
||
var concatenated = concat(jsFiles, {
|
||
delimiter: "\n",
|
||
process: wrap,
|
||
mapPath: output + ".map"
|
||
})
|
||
|
||
concatenated.prepend("/* Bruce Banner */\n")
|
||
concatenated.add("\n/* Footer */")
|
||
|
||
var result = concatenated.toStringWithSourceMap({
|
||
file: path.basename(output)
|
||
})
|
||
|
||
fs.writeFileSync(output, result.code)
|
||
fs.writeFileSync(output + ".map", result.map.toString())
|
||
```
|
||
|
||
|
||
Installation
|
||
============
|
||
|
||
`npm install source-map-concat`
|
||
|
||
```js
|
||
var concat = require("source-map-concat")
|
||
```
|
||
|
||
|
||
Usage
|
||
=====
|
||
|
||
### `concat(files, options)` ###
|
||
|
||
`files` is an array of objects with the following properties:
|
||
|
||
- `code`: The contents of the file, as a string.
|
||
- `map`: The source map of the file, if any, as an object, a string or anything
|
||
with a `.toJSON()` method (such as a [`SourceMapGenerator`]). It could be
|
||
taken straight from a compiler, be resolved using [source-map-resolve] or
|
||
created using [source-map-dummy].
|
||
- `sourcesRelativeTo`: A path that `file.map.sources` are relative to. Defaults
|
||
to `.`.
|
||
|
||
`options`:
|
||
|
||
- `delimiter`: A string to insert between each file.
|
||
- `process(node, file, index)`: A function to call on each file in `files`.
|
||
`node` is a [`SourceNode`]. You could use this to wrap JavaScript files in
|
||
IIFEs, for example.
|
||
- `mapPath`: The path to where you intend to write the source map of the
|
||
produced concatenated file. Defaults to `.`.
|
||
|
||
The files in `files` will be concatenated into a [`SourceNode`] which is
|
||
returned. You may then modify this source node if you wish (`node.add(...)` for
|
||
example). When you’re done, call `node.toStringWithSourceMap()`, which returns
|
||
an object with a `code` property containing the concatenated code, and a `map`
|
||
property containing the source map.
|
||
|
||
[source-map-resolve]: https://github.com/lydell/source-map-resolve
|
||
[source-map-dummy]: https://github.com/lydell/source-map-dummy
|
||
[`SourceNode`]: https://github.com/mozilla/source-map#sourcenode
|
||
[`SourceMapGenerator`]: https://github.com/mozilla/source-map#sourcemapgenerator
|
||
|
||
|
||
License
|
||
=======
|
||
|
||
[The X11 (“MIT”) License](LICENSE).
|