webpack
mkdir webpack-demo
cd webpack-demo
npm init -y
npm i -D webpack@5.74.0 webpack-cli@4.10.0
module.exports = {}
mkdir src
console.log("start...");
code .
const { resolve } = require('path')
module.exports = {
mode: "development",
entry: resolve(__dirname, 'src/main.js'),
output: {
path: resolve(__dirname, 'dist'),
filename: '[name].bundle.[hash:8].js'
}
}
npx webpack
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack"
},
npm run dev
console.log('start...')
console.log('end...')
npm run dev
clean-webpack-plugin
npm i -D clean-webpack-plugin@4.0.0
const { resolve } = require('path')
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
mode: "development",
entry: resolve(__dirname, 'src/main.js'),
output: {
path: resolve(__dirname, 'dist'),
filename: '[name].bundle.[hash:8].js'
},
plugins: [
new CleanWebpackPlugin()
]
}
npm run dev
// 在项目根目录下创建index.html文件,内容如下:
// ===============================================start...
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
hello,world~
<script src="./dist/bundle.js"></script>
</body>
</html>
// ===============================================end...
// 修改webpack的配置文件webpack.config.js内容如下:
// ===============================================start...
const { resolve } = require('path')
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
mode: "development",
entry: resolve(__dirname, 'src/main.js'),
output: {
path: resolve(__dirname, 'dist'),
filename: 'bundle.js' // 修改的内容在这里
},
plugins: [
new CleanWebpackPlugin()
]
}
// ===============================================end...
// 再次执行npm run dev命令进行打包
npm run dev
// 浏览器打开index.html文件,并打开控制台,可以看到输出的内容
html-webpack-plugin
npm i -D html-webpack-plugin@5.5.0
const { resolve } = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
module.exports = {
mode: "development",
entry: resolve(__dirname, "src/main.js"),
output: {
path: resolve(__dirname, "dist"),
filename: "bundle.js",
},
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin(),
],
};
npm run dev
const { resolve } = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
module.exports = {
mode: "development",
entry: resolve(__dirname, "src/main.js"),
output: {
path: resolve(__dirname, "dist"),
filename: "bundle.js",
},
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({template: resolve(__dirname, 'index.html')}),
],
};
webpack-dev-server
npm i -D webpack-dev-server@4.10.1
npx webpack serve
npx webpack-dev-server
npx webpack-dev-server --open
npx webpack-dev-server --progress
npx webpack-dev-server --open --progress
const { resolve } = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
module.exports = {
mode: "development",
entry: resolve(__dirname, "src/main.js"),
output: {
path: resolve(__dirname, "dist"),
filename: "bundle.js",
},
devServer: {
open: true,
port: 8088,
},
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({template: resolve(__dirname, 'index.html')}),
],
};
npx webpack serve
npx webpack serve --progress
npx wepack-dev-server
npx wepack-dev-server --progress
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack",
"serve": "webpack serve --progress"
},
import { hello } from './hello'
hello()
export const hello = ()=>{
console.log('hello...')
}
import Person from './hello'
const p = new Person('莉莉')
p.sayHello()
export default class Person {
constructor(name){
this.name = name
}
sayHello(){
console.log(this.name + ' say: ' + 'hello......')
}
}
sass&sass-loader
body{
background-color: red;
}
import './style.scss'
import Person from './hello'
const p = new Person('莉莉')
p.sayHello()
npm i -D style-loader@3.3.1 css-loader@6.7.1 sass-loader@13.0.2 node-sass@7.0.1
const { resolve } = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
module.exports = {
mode: "development",
entry: resolve(__dirname, "src/main.js"),
output: {
path: resolve(__dirname, "dist"),
filename: "bundle.js",
},
module: {
rules: [
{
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader']
}
]
},
devServer: {
open: true,
port: 8088,
},
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({template: resolve(__dirname, 'index.html')}),
],
};
npm run serve
eslint&prettier
npm i -D eslint@8.23.0
npm init @eslint/config
npx eslint src/main.js
npx eslint src/main.js --fix
"editor.codeActionsOnSave": {
"source.fixAll": true
},
"editor.formatOnSave": true,
"editor.formatOnType": true,
"editor.formatOnType": true,
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll": true
},
npm i -D prettier
module.exports = {
tabWidth: 4,
useTabs: false,
semi: false,
singleQuote: true,
}
"editor.formatOnSave": true,
typescript
npm i -D ts-loader@9.4.1 typescript@4.8.3
const { resolve } = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
module.exports = {
mode: "development",
entry: resolve(__dirname, "src/main.js"),
output: {
path: resolve(__dirname, "dist"),
filename: "bundle.js",
},
module: {
rules: [
{
test: /\.scss$/,
use: ["style-loader", "css-loader", "sass-loader"],
},
{
test: /\.ts$/,
use: "ts-loader",
},
],
},
devServer: {
open: true,
port: 8088,
},
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({ template: resolve(__dirname, "index.html") }),
],
};
export default class Application {
private _name: string;
constructor(name) {
this._name = name;
this.start();
}
start() {
console.log("........", this._name);
}
}
import Application from "./Application";
new Application("kk");
resolve: {
extensions: [".js", ".ts", ".json"],
},
resolve: {
alias: {
"@": path.resolve(__dirname, "./src")
}
},
分离css样式文件
npm i -D mini-css-extract-plugin@2.6.1
const MiniCssExtractPlugin = require("mini-css-extract-plugin")
module: {
rules: [
{
test: /\.scss$/,
use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"],
}
]
},
plugins: [
new MiniCssExtractPlugin()
]
source-map
none
eval
eval-source-map
cheap-eval-source-map
cheap-module-eval-source-map
cheap-source-map
cheap-module-source-map
inline-cheap-source-map
inline-cheap-module-source-map
source-map
inline-source-map
hidden-source-map
nosources-source-map
git-hooks 与 husky
npm i -D husky
"scripts": {
"prepare": "husky install",
"lint": "eslint src"
},
npx husky add .husky/pre-commit "npm run lint"