问题
Hi I am currently using webpack to bundle my project files into a single file. However, I do not want webpack to bundle my config.js file where all my config is set. I would like to this remain separate in the output folder but not sure out to achieve this.
my current setup is
//index.js file
#!/usr/bin/env node
'use strict';
let config = require('config.js);
let read = require('read.js);
console.log('i am running through command line');
//read.js file
'use strict'
console.log('read a text file');
//config.js
'use strict';
module.exports = {
name: 'test'
}
//webpack.config.js
let webpack = require('webpack');
let path = require('path');
let fs = require('fs');
let nodeModules = {};
fs.readdirSync('node_modules')
.filter(function (x) {
return [ '.bin' ].indexOf(x) === -1;
})
.forEach(function (mod) {
nodeModules[mod] = 'commonjs ' + mod;
});
module.exports = {
entry: [ 'babel-polyfill', './index.js' ],
target: 'node',
node: {
__dirname: true
},
output: {
path: path.join(__dirname, 'webpack_bundle'),
filename: '[name].js',
libraryTarget: 'commonjs'
},
module: {
loaders: [
{
test: /\.js$/,
loader: 'shebang-loader'
},
{
test: /\.js$/,
loader: 'babel-loader',
query: {
presets: [ 'es2015' ]
}
} ]
},
resolve: {
extensions: [ '.js' ]
},
plugins: [
new webpack.BannerPlugin({banner: '#!/usr/bin/env node', raw: true
})
]
,
externals: nodeModules
};
Note: I have significantly simplified the code example for brevity
Currently when i run the webpack
command i get a folder webpack_bundle
which contains an index.js
file - the index.js file includes the dependencies config.js
and read.js
. However, what i would like is for the read.js
dependency to be bundled into the index.js
file but the config.js
dependency to stay external in a separate file which gets required by the bundled webpack output. So the folder webpack_bundle
should contain two files after running the webpack
command - index.js
and config.js
. I have already tried to modify the externals by adding the following key value to the externals object config: './config.js'
but this did not work. I also created an extra entrypoint by specifying config.js as the entrypoint but this also did not work. I can't figure this out and the webpack docs are not that clear on how to achieve this. Please help!
回答1:
If you want your config in a separate bundle, you can create a split point, by importing dynamically your config.js
file with require.ensure
:
require.ensure([], function() {
let config = require('./config.js');
});
Your config will then be in a separate bundle.
- Documentation about Code splitting (warning: Webpack 1.x is deprecated).
- Documentation about Code Splitting (Webpack 2).
Edit:
If you don't want your config file to be bundled by Webpack, I think you can use IgnorePlugin
:
module.exports = {
//...
plugins: [new webpack.IgnorePlugin(/^\.\/config\.js$/)]
}
And use copy-webpack-plugin to copy your config.js
file.
来源:https://stackoverflow.com/questions/43368399/how-do-i-prevent-a-js-file-being-bundled-by-webpack