webpack4 版本基础环境
静态文件编译,ts,js,scss,less编译,浏览器后缀
视频
www.bilibili.com/video/BV1o3…
创建下面3个文件
{
"name": "webpack4_base",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"scripts": {
"build": "webpack --mode production",
"serve": "npx webpack-dev-server"
},
"browserslist": {
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
],
"production": [
">0.2%",
"not dead",
"not op_mini all"
]
},
"devDependencies": {
"typescript": "4.6.3",
"ts-loader": "8.0.11",
"css-loader": "3.4.2",
"file-loader": "3.0.1",
"html-loader": "0.5.5",
"html-webpack-plugin": "3.2.0",
"clean-webpack-plugin": "1.0.0",
"less": "3.0.0",
"less-loader": "5.0.0",
"sass": "1.30.0",
"sass-loader": "10.1.0",
"mini-css-extract-plugin": "0.9.0",
"optimize-css-assets-webpack-plugin": "5.0.3",
"postcss-loader": "3.0.0",
"postcss-preset-env": "6.7.0",
"style-loader": "1.1.3",
"url-loader": "3.0.0",
"webpack": "4.41.6",
"webpack-cli": "3.3.11",
"webpack-dev-server": "3.10.3"
}
}
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
}
}
const { resolve } = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const optimizeCssAssetsWebpackPlugin = require("optimize-css-assets-webpack-plugin");
const CleanWebpackPlugin = require("clean-webpack-plugin");
process.env.NODE_ENV = "production";
module.exports = {
entry: resolve(__dirname, "./index.ts"),
devServer: {
open: true,
contentBase: resolve(__dirname, "dist"),
compress: true,
port: "888",
index: "index.html",
publicPath: "/",
hot: true,
overlay: true,
watchContentBase: true,
watchOptions: {
ignored: /node_modules/,
},
clientLogLevel: "none",
},
output: {
filename: "js/main.js",
path: resolve(__dirname, "dist"),
chunkFilename: "js/[name]_chunk_[hash:6].js",
},
module: {
rules: [
{
test: /\.ts$/,
loader: "ts-loader",
},
{
oneOf: [
{
test: /\.css$/i,
use: [
{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: "../",
},
},
"css-loader",
{
loader: "postcss-loader",
options: {
ident: "postcss",
plugins: () => [
require("postcss-preset-env")(),
],
},
},
],
},
{
test: /\.less$/i,
use: [
{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: "../",
},
},
"css-loader",
"less-loader",
{
loader: "postcss-loader",
options: {
ident: "postcss",
plugins: () => [require("postcss-preset-env")()],
},
},
],
},
{
test: /\.scss$/i,
use: [
{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: "../",
},
},
"css-loader",
"sass-loader",
{
loader: "postcss-loader",
options: {
ident: "postcss",
plugins: () => [require("postcss-preset-env")()],
},
},
],
},
{
test: /\.(png|jpg|gif)$/i,
loader: "url-loader",
options: {
limit: 0,
esModule: false,
name: "img/[name].[hash:6].[ext]",
},
},
{
test: /\.html$/i,
loader: "html-loader",
},
{
exclude: /\.(html|png|jpg|gif|less|css|js|ts)$/i,
loader: "file-loader",
options: {
name: "asstes/[name].[hash:6].[ext]",
},
},
],
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: "./index.html",
minify: {
collapseWhitespace: false,
removeComments: true,
},
}),
new MiniCssExtractPlugin({
filename: "css/[name].[hash:6].css",
}),
new optimizeCssAssetsWebpackPlugin(),
new CleanWebpackPlugin("./dist"),
],
resolve: {
alias: {
"@js3": resolve(__dirname, "./src/js3"),
},
extensions: [".wasm", ".mjs", ".js", ".json", ".ts"],
modules: [resolve(__dirname, "./node_modules"), "node_modules"],
},
};
运行
npm install
npm run serve
npm run build