I\'m trying to include @mycompany/package1, and @mycompany/package2 to be compiled along with the rest of my code using babel-node
. Since package1 and package2 are
I found out that we can do this with webpack
to help bundle the packages with the rest of your code.
This is my webpack file for NodeJS.
const path = require('path');
const nodeExternals = require('webpack-node-externals');
const webpack = require('webpack');
const spawn = require('child_process').spawn;
const nodeEnv = process.env.NODE_ENV;
const isProduction = nodeEnv === 'production';
const compiler = webpack({
entry: ['@babel/polyfill', './src/server.js'],
output: {
path: path.resolve(__dirname, 'lib'),
filename: 'server.bundle.js',
libraryTarget: 'commonjs2'
},
externals: [
nodeExternals({
whitelist: [/@mycompany\/.*/]
})
],
plugins: plugins,
target: 'node',
mode: 'development',
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules\/(?!(@mycompany)\/).*/,
use: {
loader: 'babel-loader',
options: {
configFile: './babel.config.js'
}
}
}
]
}
});
if (isProduction) {
compiler.run((err, stats) => {
if (err) {
console.error(err);
return;
}
console.log(
stats.toString({
colors: true
})
);
});
} else {
let serverControl;
compiler.watch(
{
aggregateTimeout: 300,
poll: 1000
},
(err, stats) => {
if (serverControl) {
serverControl.kill();
}
if (err) {
console.error(err);
return;
}
console.log(
stats.toString({
colors: true
})
);
// change app.js to the relative path to the bundle created by webpack, if necessary
serverControl = spawn('node', [
path.resolve(__dirname, 'lib/server.bundle.js')
]);
serverControl.stdout.on('data', data => console.log(data.toString()));
serverControl.stderr.on('data', data => console.error(data.toString()));
}
);
}
Note the most important part is
- Adding
webpack-node-externals
. Since this is anode.js
server we don't need to bundle the node_modules.- Make sure you
whitelist
your package that you need to be compiled/bundled and also make sure you have your packages included to be compiled in yourbabel-loader
nodeExternal
tells webpack
know not to bundle ANY node_modules.whitelist
is saying that we should bundle the packages we listed
externals: [
nodeExternals({
whitelist: [/@mycompany\/.*/]
})
]
This line means to exclude all node_modules EXCEPT @mycompany/* packages
exclude: /node_modules\/(?!(@mycompany)\/).*/,