I am testdriving rollupjs to package a node app into a bundle.js
and am confused.
Does rollup support bundling a full node app (including
node_modules
), or just the js files that are part of your project?
I have a standard node project (1 index.js
, thousands of files in node_modules
) and would like just one bundle.js
. I tried:
rollup.config.js:
import commonjs from 'rollup-plugin-commonjs';
import nodeResolve from 'rollup-plugin-node-resolve';
export default {
entry: 'index.js',
dest: 'bundle.js',
format: 'iife',
plugins: [
commonjs({
// non-CommonJS modules will be ignored, but you can also
// specifically include/exclude files
include: 'node_modules/**', // Default: undefined
// if true then uses of `global` won't be dealt with by this plugin
ignoreGlobal: false, // Default: false
// if false then skip sourceMap generation for CommonJS modules
sourceMap: false, // Default: true
}),
nodeResolve({
jsnext: true,
main: false
})
]
};
Whatever I try rollup
turns this index.js
:
module.exports = require('dat-node') // 88 MB node_modules
with this command:
rollup index.js --format iife --output dist/bundle.js -c
to this bundle.js
without adding anything from node_modules
:
(function () {
'use strict';
module.exports = require('dat-node');
}());
And I have tried:
Now I am thinking, maybe I understand rollup incorrectly and it does not support what I want. Help much appreciated!
Try this:
import commonjs from "rollup-plugin-commonjs";
import nodeResolve from "rollup-plugin-node-resolve";
export default {
entry : "index.js",
dest : "bundle.js",
moduleName : "myModule",
format : "iife",
plugins : [
commonjs({
// non-CommonJS modules will be ignored, but you can also
// specifically include/exclude files
include: [ "./index.js", "node_modules/**" ], // Default: undefined
// if true then uses of `global` won't be dealt with by this plugin
ignoreGlobal: false, // Default: false
// if false then skip sourceMap generation for CommonJS modules
sourceMap: false // Default: true
}),
nodeResolve({
jsnext: true,
main: false
})
]
};
The main change is that you need to include index.js
in the commonjs
call as well, otherwise it won't get converted to an ES6 module (which is what nodeResolve
needs).
You also need to set moduleName
.
NB: I didn't test specifically with dat-node
, but with lodash
.