Webpack requires an entry point which defines the main program of the application where bundling should begin from. Webpack’s default entry point is src/index.js, which will be used when the config file does not specify an entry point.
The exit point defines where Webpack will store the bundled output. If no exit point is defined, Webpack will store its output in dist/main.js.
Both the entry and exit points can be defined in the config file.
const path = require('path');module.exports = {entry: './source/input.js',output: {filename: 'output.js',path: path.resolve(__dirname, 'built'),}}
Webpack rules define how content should be bundled into the project output.
Rules have a test
option to specify a pattern of filenames that the rule should be applied to.
If the file type needs a loader to be bundled, the rule will contain a use
option with the correct loader(s). If the file type can be incorporated with Webpack 5’s asset system, a type
option will be specified.
rules:[{test: /\.css$/i,use: ["style-loader","css-loader"]},{test: /\.png$/i,type: "asset/resource"},{test: /\.txt$/i,type: "asset/source"}]
When working with a Node.js project, developers will typically define a build
command in the package.json. The build
command will run commands that prepare the project to be served to the users. Defining the build
command standardizes this preparation process regardless of the tools being used.
"scripts": {"build": "webpack --watch"}
Combining webpack-dev-server
and Webpack’s watch mode is a powerful way to preview changes to your application as you save them. The watch mode waits for file changes and rebuilds the application when needed, while webpack-dev-servers
serves a local preview of your builds in the browser.
"scripts": {"build":"webpack --watch","start":"webpack serve"}
Webpack uses two loaders, css-loader
and style-loader
to add and apply CSS to the web content. The css-loader
inserts the CSS into the JS code, and style-loader
takes the output of css-loader
and inserts it into a <style>
tag in the HTML. Webpack applies loaders from right to left, so in the rule for CSS files, style-loader
is the first element in the array of loaders, and css-loader
is second.
{test: /\.css$/i,use: ['style-loader', 'css-loader']}
Rather than using loaders, text files, images, and fonts are bundled via Webpack’s asset system. Filetypes that utilize the asset system have a type
configuration option rather than use
. Text files are set to the source
type
, which incorporates the content of the file directly into JavaScript. Fonts and images commonly use the resource
type
, which imports the files using a URL specification.
module.exports = {module: {rules: [{test: /\.txt$/i,type: 'asset/source'},{test: /\.png$/i,type: 'asset/resource'},{test: /\.ttf$/i,type: 'asset/resource'}]}}