携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第29天,点击查看活动详情
源码问题和分析
1.css和js资源较多,且全部采用同步加载,渲染时需多次请求和加载,降低页面加载性能
2.css和js源码未压缩
3.开发模式陈旧,需要同时维护html、css和js,代码逻辑和结构不清晰,迭代困难
4.项目不支持source-map,调试困难,手动维护source-map成本大
接下来将html项目改造成 单页面应用项目
项目初始化
1.创建Npm项目
mkdir zbest
cd zbest
npm init -y
2.安装webpack依赖
npm install webpack webpack-cli
3.创建js入口文件
touch src/index.js
4.创建webpack配置文件
const path = require('path')
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname,'dist')
}
}
5.配置package.json中的build命令
"scripts": {
"build": "webpack"
},
6.执行 npm run build 打包
首页移植
1.资源文件拷贝,将源码中的 html/css/js/img 文件拷贝到新项目中:
a. 将 index.html 拷贝到 src/index.html
b. 将 js 目录 拷贝到 src/js
c. 将css 目录拷贝到 src/css
d. 将 img 目录拷贝到 src/img
2.删除Inde.html中的Link和script
3.安装html-webpack-plugin插件
npm install html-webpack-plugin --save-dev
4.配置html-webpack-plugin,配置好后,重新 npm run build,就可以看到在 dist目录下创建了index.html,
并且 自动把打包好的 bundle.js加入到了 dist/index.html中
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname,'dist')
},
plugins: [
new HtmlWebpackPlugin({
filename: 'index.html',
template: './src/index.html'
})
]
}
5.在src/index.js中添加css引用。
5.1 安装 需要的loader
npm install css-loader style-loader --save-dev
5.2 在webpack.config.js中进行配置
module: {
rules: [
{
test: /.css$/,
use: ['style-loader', 'css-loader']
}
]
},
5.3 webpack使用file-loader或者img-loader处理图片打包,webpack5中提供了ModuleAssets来处理图片
这里使用ModuleAssets来处理图片
module: {
rules: [
{
test: /.css$/,
use: ['style-loader', 'css-loader']
},
{
test: /.(png|svg|jpg|jpeg|gif)$/i,
type: 'asset',
parser: {
dataUrlCondition: {
maxSize: 8 * 1024,
},
},
generator: {
filename: 'images/[name][hash:6][ext]',
},
}
]
},
5.4 重新 执行 npm run build后看下打包效果,小于8kb的就会打包成base64,大于8kb的就会打包成图片文件
6.在src/index.js中添加js引用
import './js/jquery-1.12.4.min.js';
import './js/public';
import './js/nav';
import './js/jquery.flexslider-min';
这里有个问题就是 jquery中 的 $ 问题
使用webpack内置的一个插件 ProvidePlugin
首先安装下 需要的jquery和flexsilder插件
npm install jquery flexslider
接着在webpack.config.js中配置这两个库
new webpack.ProvidePlugin({
$:'jquery',
jQuery:'jquery'
})
重新执行 npm run build后打包看下效果
7.调整index.html中的图片路径,将 index.html中的图片路径全部改成 ../src/img/
这样 首页就改造完成了
登录页面移植:
1.拷贝login至src/login.html
2.删除css引用
3.修改图片链接img改完../src/img
4.在src/index.js中添加import './css/login.css'
5.修改webpack配置,添加login.html的配置