webpack
webpack是什么 – 静态模块的打包工具,能进行模块化开发,自动处理打包后,模板中间的关系(依赖关系)
什么是静态资源 – js css html
如果使用webpack
安装前检查
需要使用系统中之前安装过得 node 中 npm
npm win7 12+ win10 12+ 14+ 也不能低于12
node - v npm -v
准备安装
创建一个目录 web
初始化 — npm init --yes
在安装的时候,防止安装过慢,可以使用中文镜像
npm config set registry https://registry.npm.taobao.org/
安装webpack
npm install webpack
npm install webpack-cli
或
npm install webpack webpack-cli -D -D dev 当安装的工具包,只在开发的时候使用,发布上线后会删除
注:在安装的时候使用了 -D参数 就会在 devDependencies键的位置看到你安装的软件 项目发布后不会被保留
-S save 发布以后,依然保留模块
注:安装的使用使用了 -S 参数 就会在 dependencies 键的位置显示你安装的软件 项目发布后会保留
-g 全局安装(不常用,一旦使用全局安装 之后的所有插件都要全局安装)
如果出现版本不兼容问题 需要使用固定版本
需要通过设置指定版本进行安装软件:
npm install webpack@4.4.4 -D
使用的是版本12+出现了错误 可以指定版本
npm install webpack@5.4.0 -D
nom install webpack-cli@4.2.0 -D
js代码使用webpakc进行打包(两种方法)
方法一:(不太常用)
创建html代码
创建js代码
html文件中的代码
Documentjs代码
// 引入模块
import $ from "jquery"
$('ul li:even').css('background','red');
$('ul li:odd').css('background','pink');
//引入css
import "./index.css"
import"./index.html"
package.json代码
{
"name": "3",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "webpack ./index.js -o dist" //将js代码进行打包操作(方法一打包)
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"jquery": "^3.6.0"
},
"devDependencies": {
"webpack": "^5.39.1",
"webpack-cli": "^3.3.12",
}
}
注:
①:start是自定义的命令名字
②:保存之后 在cmd里执行 npm run start命令
③:成功之后 会生成一个dist文件夹 在里面会生成一个main.js文件 这个文件就是打包后的js文件
④:使用 在html代码里的Script标签里src按写 src="./dist/main.js"
方法二:(常用)
可以封装一个config文件 做一些更细致的配置
(名字自定义)webpack.config.js
conts path = require('path');
module.exprots={
//js代码打包
entry:path.join(__dirname,'./index.js),
output:{
path:path.join(__dirname,'./dits') -- 储存路径
filename:'zdy.js' -- 自定义打包之后的js文件名
}
}
创建完成 需要到package.json的添加新命令
"scripts":{
"starts":"webpack --config webpack.config.js"
}
热重载
当文件打包完成,在次修改完成代码 还需要重新打包一遍 对于开发很麻烦 所以需要热重载
安装: npm install webpack-dev-server -D
使用:
"scripts":{
"startss":"webpack-dev-server --config webpack.config.js --hot --port 1999"
--hot 热重载(自动更新)
--port 1999 监听端口 端口号
--open 自动打开浏览器
}
执行: npm run startss
报错问题:
出现Error: Cannot find module 'webpack-cli/bin/config-yargs' 主要问题可能是由于新版本的webpack-cli不兼容
需要先写卸载老版本的webpack-cli 再安装老版本 npm install webpack-cli@3.3.12 -D
注意:
如果通过热重载方式运行了项目,需要去服务器执行我们的代码
html代码script标签的src直接写./webpack.config.js里自定义打包之后的js文件名
html打包方式
需要安装新npm插件: npm install html-webpack-plugin -D
修改webpakc.config.js文件
新添加引入模块: const HtmlWebpackPlugin = reqire('html-webpakc-plugin');
添加配置
plgins:[
new HtmlWebpackPlugin({
template:path.join(__dirname,'./index.html'),
filename:"./index.html"
})
]
在打包之前需要删除html代码里的script引入入径代码
使用:
"scripts":{
"startsss":"webpack --config webpack.config.js"
}
执行: npm run startsss
注:
打包之后webpack会自动把index.html和index.js关联到一起 生成一个新的index.html
css打包方式
安装: npm install style-loader css-loader -D
css-loader 软件 可以把css文件解析成webpack能看到的格式
style-loader 把打包好的css模块解析成css样式表
修改webpakc.config.js文件
module:{
rules:[{
test:/.css$/,
use:['style-loader','css-loader']
注:这里的写的顺序一定是style-loader css-loader不能进行调换
}]
}
使用:
"scripts":{
"startsss":"webpack --config webpack.config.js"
}
执行: npm run startsss
html热更新
安装: npm install raw-loader -D
修改webpakc.config.js文件
{
test:/.(htm|html)$/,
use:['raw-loader']
}
在index.js引入index.html文件
import "./index.html"
ES6 转 ES5
按装: npm install babel-core babel-loader@7.1.5 babel-plugin-transform-runtime babel-preset-env babel-preset-stage-0 -D
修改webpakc.config.js文件
{
test:/\.js/,
use:['babel-loader'],exclude:/node_modules/
}
注:
exclude表示排除掉 node_modules下载的依赖项。这样可以加速网站开发,而且我们也只需要对我们的项目src 源文件进行编译即可。
新增 .babelrc文件
{
"presets":["env","stage-0"],
"plugins":["transform-runtime"]
}
解释
babel-present-env 仅仅包括 babel-present-2015 、2016、2017,不包括: babel-stage-x ,也不包括 babel-polyfill
babel-present-env 仅仅转换 新版的语法 如:箭头函数,并不转换新版api 如:Array.include转换新版
api及抹平浏览器之间的差异(兼容ie)需要 babel-polyfill
babel-polyfill 会污染全局,比较暴力。而 babel-plugin-transfrom-runtime 是哪里需要就给
哪里转换。
babel-plugin-transform-runtime 主要做了一下三件事:
当你使用 generators/async 函数时,自动引入 babel-runtime/regenerator (使用 regenerator
运行时而不会污染当前环境) 。
自动引入 babel-runtime/core-js 并映射 ES6 静态方法和内置插件(实现polyfill的功能且无全局污染,
但是实例方法无法正常使用,如 “foobar”.includes(“foo”) ) 。
移除内联的 Babel helper 并使用模块 babel-runtime/helpers 代替(提取babel转换语法的代
码)。
打包代码完整版
html里正常写代码就写 ,打包的时候需要将引入的js文件和css文件路径删除
css文件代码正常写就写
index.js代码
import $ from 'jquery' -- 引入npm下载的jq文件
需要执行的jq代码
import "需要打包的css文件"
import "需要执行热重载的html文件"(需要html热重载写,不需要不写)
webpack.config.js代码
const HtmlWebpackPluegin = require('html-webpack-plugin'); -- 引入打包html需要模块
const paht = require('path');
module.exports={
打包js需要的代码
entry:path.join(__dirname.'需要打包的js文件'),
output:{
path:path.join(__dirname.'需要存储的文件夹名'),
filename:"自定义打包后js的文件夹名"
},
打包html需要的代码
pluins:[
new HtmlWebpackPluegin({
template:path.join(__dirname,'需要打包的html文件.'),
filename:"打包后html自定义名字"
})
],
moudle:{
rules[
打包css需要的代码
{
test:/.css$/,
use:['style-loader','css-loader']
},
html热重载需要执行的代码(需要html热重载写,不需要不写)
{
test:/.(htm|html)$/,
use:['raw-loader']
},
ES6语法转ES5语法需要执行的代码(需要转语法就写 不需要不写)
{
test:/\.js/,
use:['babel-loader'],exclude:/node_modules/
}
]
}
}
.babelrc文件 (需要转语法就写 不需要转不需要写该文件)
{
"presets":["env","stage-0"],
"plugins":["transform-runtime"]
}