I have multiple entry points in my webpack config for login, app, error pages, I only require login and app to output a js file for these entries and error to only output styles. At the moment all the entries output both styles and scripts and I'm not overly sure how to be specific with what gets output?
Webpack
entry: {
'main': [
'babel-polyfill',
'./source/styles/src/imports/main/main.scss',
'./source/app/app.main.js'
],
'login': [
'./source/styles/src/imports/login/login.scss',
'./source/scripts/login.js'
],
'errors': './source/styles/src/imports/errors/errors.scss'
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: './scripts/[name]/[name].min.js',
chunkFilename: './scripts/chunks/[id].[name].min.js'
}
Outputs
dist/
scripts/
errors/ <---- doesn't need to be here
main/
login/
styles/
errors/
main/
login/
Can anyone suggest how I can exclude errors from being output in scripts?
webpack.config.jsmodule. exports = { entry: { main: './path/to/my/entry/file. js', }, }; We can also pass an array of file paths to the entry property which creates what is known as a "multi-main entry".
Configuring the output configuration options tells webpack how to write the compiled files to disk. Note that, while there can be multiple entry points, only one output configuration is specified.
The code there does cause a separate chunk, lodash. bundle. js , to be generated and technically "lazy-loads" it as soon as the script is run. The trouble is that no user interaction is required to load the bundle – meaning that every time the page is loaded, the request will fire.
Output is a property that tells webpack where to emit / save the bundles it creates and how to name these bundled files. By default the main output file gets stored in ./dist/main. js and other generated files are stored in ./dist . module. exports = { output: { path: path.
Webpack create separate file for each key
present in your entry object
the key
of entry object decide name
of separate file to create and value
of that key decide what content
to include in that file
if you dont want to create a separate file but include it's content in you bundle then just add path of this file in your previous entry
for example
entry: {
main: ['src/js/main.js'],
app: ['src/js/app.js']
}
will create two seprate file 1.main.js
and 2.app.js
with there respective content
and
entry: {
main: ['src/js/main.js', 'src/js/app.js']
}
will create one file main.js
(because the key of entry object is called main
) with the content of both file included in it
and
entry: {
app: ['src/js/main.js', 'src/js/app.js']
}
will aslo create one file app.js
(because the key of entry object is called app
) with the content of both file included in it
so if you don't want to create separate errors file but include it's content then don't add errors property on entry
object
then your configration will be like
entry: {
'main': [
'babel-polyfill',
'./source/styles/src/imports/main/main.scss',
'./source/app/app.main.js',
'./source/styles/src/imports/errors/errors.scss' <--- so that webpack know to include content of that file also
],
'login': [
'./source/styles/src/imports/login/login.scss',
'./source/scripts/login.js'
]
}
also note that you need to use either the style-loader
or extract-text-webpack-plugin
to separate css
content from your JavaScript file
to create independent errors.css
file you need to use two different instance of extract-text-wepack-plugin
one for regular css file and one for errors.css file and use include
exclude
property to seprate
const extractCSS = new ExtractTextPlugin('main.css');
const extractERRORS = new ExtractTextPlugin('errors.css');
.
.
.
module: {
rules: [
{
test: /\.scss$/,
exclude: /errors/,
use: extractCSS.extract([ 'css-loader', 'sass-loader' ])
},
{
test: /\.scss$/,
include: /errors/,
use: extractERRORS.extract([ 'css-loader', 'sass-loader' ])
},
]
},
plugins: [
extractCSS,
extractERRORS
]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With