I'm very new to Webpack and I can't seem to get jQuery installed correctly. I've followed numerous instructions that I found online but whatever I try I still get a '$ is not defined' error whenever I try to include some jQuery in my page. My webpack config files are as follows (I have 3 config files: dev, prod and common). I've removed all my previous, failed jQuery attempts from the config files. To confirm, I have installed jQuery with npm and can see it listed as a dependency in my package.json file.
I'm also using bootstrap in the build which is working fine.
If anyone could help I'd really appreciate it. I've been banging my head against a wall for so long now.
Thanks
Webpack config files...
dev:
const path = require("path");
const common = require("./webpack.common");
const { merge } = require("webpack-merge");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = merge(common, {
mode: "development",
output: {
filename: "[name].bundle.js",
path: path.resolve(__dirname, "dist"),
},
plugins: [
new HtmlWebpackPlugin({
template: "./src/template.html",
}),
new HtmlWebpackPlugin({
filename: "header.html",
template: "./src/header.html",
}),
],
module: {
rules: [
{
test: /\.scss$/,
use: [
{
loader: "style-loader",
},
{
loader: "css-loader",
},
{
loader: "postcss-loader",
options: {
plugins: function () {
return [require("autoprefixer")];
},
},
},
{
loader: "sass-loader",
},
],
},
],
},
});
prod:
const path = require("path");
const common = require("./webpack.common");
const { merge } = require("webpack-merge");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCssAssetsPlugin = require("optimize-css-assets-webpack-plugin");
const TerserPlugin = require("terser-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = merge(common, {
mode: "production",
output: {
filename: "[name].[contentHash].bundle.js",
path: path.resolve(__dirname, "dist"),
},
optimization: {
minimizer: [
new OptimizeCssAssetsPlugin(),
new TerserPlugin(),
new HtmlWebpackPlugin({
template: "./src/template.html",
minify: {
removeAttributeQuotes: true,
collapseWhitespace: true,
removeComments: true,
},
}),
new HtmlWebpackPlugin({
filename: "header.html",
template: "./src/header.html",
minify: {
removeAttributeQuotes: true,
collapseWhitespace: true,
removeComments: true,
},
}),
],
},
plugins: [
new MiniCssExtractPlugin({ filename: "[name].[contentHash].css" }),
new CleanWebpackPlugin(),
],
module: {
rules: [
{
test: /\.scss$/,
use: [
{
loader: MiniCssExtractPlugin.loader,
},
{
loader: "css-loader",
},
{
loader: "postcss-loader",
options: {
plugins: function () {
return [require("autoprefixer")];
},
},
},
{
loader: "sass-loader",
},
],
},
],
},
});
common:
const path = require("path");
module.exports = {
entry: {
main: "./src/index.js",
vendor: "./src/vendor.js",
},
module: {
rules: [
{
test: /\.html$/,
use: ["html-loader"],
},
{
test: /\.(svg|png|jpg|gif)$/,
use: {
loader: "file-loader",
options: {
name: "[name].[hash].[ext]",
outputPath: "imgs",
},
},
},
{
test: /\.(svg|eot|woff|ttf|svg|woff2)$/,
use: [
{
loader: "file-loader",
options: {
name: "[path][name].[ext]",
},
},
],
},
],
},
};