https://www.webpackjs.com/
注意:webpack4.x的命令行工具被单独分离出来,需要单独安装webpack-cli
全局安装:
npm i webpack -g
npm i webpack-cli -g
npm init
,初始化package.json文件,如果想快速创建,可以npm init -y
npm i webpack webpack-cli --save-dev
import add from './math.js'
console.log(add(1,2));
//math.js
export default function add(num1,num2)=>{num1+num2}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>webpack-studytitle>
head>
<body>
<script type="../dist/bundle.js">script>
body>
html>
const path = require('path');
module.exports = {
entry: './src/index.js',//入口文件
output: {
path: path.resolve(__dirname, 'dist'),//从根目录查找,输出文件的位置
filename: 'bundle.js'//输出文件的名称
},
mode: 'development' // 设置mode,这是新增属性,不设置会有警告,具体的可以参考官方文档
};
打包后
npm i webpack-dev-server --save-dev
"dev":"webpack-dev-server"
npm run dev
这种感觉很像Apache,点开src,默认加载index.html,然后我们发现报错404,仔细一看,竟然dist目录都没有
实际上不是没有,是放在了内存中,这样调用快,但是index.html的script的引用路径就得改一下,去掉dist,此时发现,控制台可以输出预期数据了
然而还是有问题,访问8080端口后进入的是一个根目录面板,进入src需要手动去点,很麻烦,我们希望它智能点
在上述package.json文件的script里边做些修改,指定访问路径"dev": "webpack-dev-server --contentBase src"
当然,对应的index.html里边的script的引用路径也得改一下,,此时发现,控制台可以输出预期数据了
注意,需要重新npm run dev
试着改变两个加数的值,你会发现,保存的一瞬间,webpack同步编译,且不需要手动刷新界面,控制台就能实时显示新数据
由于使用–contentBase指令的过程比较繁琐,需要指定启动的目录,同时还需要修改index.html中script标签的src属性,所以推荐大家使用html-webpack-plugin插件配置启动页面.
npm i html-webpack-plugin --save-dev
const path = require('path');
// 导入自动生成HTMl文件的插件
var htmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
},
mode: 'development', // 设置mode
plugins: [ // 添加plugins节点配置插件
new htmlWebpackPlugin({
template: path.resolve(__dirname, 'src/index.html'), //模板路径
filename: 'index.html' //自动生成的HTML文件的名称
})]
};
"dev": "webpack-dev-server"
npm run dev
,此时,你会发现之前的麻烦事已经被解决了其实这个很简单,修改一下package.json文件的script脚本dev指令即可"dev": "webpack-dev-server --hot --port 3000 --open"
–open表示自动打开浏览器,–port 3000表示打开的端口号为3000,–hot表示启用浏览器热更新
当然,也可以在webpack的配置文件里修改
npm i style-loader css-loader --save-dev
const path = require('path');
// 导入自动生成HTMl文件的插件
var htmlWebpackPlugin = require('html-webpack-plugin');
var webpack = require('webpack');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
},
mode: 'development' ,// 设置mode
plugins:[ // 添加plugins节点配置插件
new htmlWebpackPlugin({
template:path.resolve(__dirname, 'src/index.html'),//模板路径
filename:'index.html'//自动生成的HTML文件的名称
}),
new webpack.HotModuleReplacementPlugin()
],
devServer:{
hot:true,
open:true,
port:3000
},
module: { // 用来配置第三方loader模块的
rules: [ // 文件的匹配规则
{ test: /\.css$/,
use: ['style-loader', 'css-loader'] //处理css文件的规则
}
]
}
};
import style from "./css/style.css"
document.querySelector("h1").classList.add("style");
npm i less-loader less -D
,-D和之前的–save-dev效果一样{ test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] },
npm i sass-loader node-sass --save-dev
{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }
npm install --save-dev file-loader
{test: /\.(png|svg|jpg|gif)$/, use: ['file-loader'] }
学习资源推荐:https://blog.csdn.net/qq_42813491/article/details/90213353