仿B站项目(3)页面配置
页面配置
B站有很多页面,比如说首页啊,动画页啊,音乐页啊,舞蹈页啊,那就从首页开始。
通过观察首页,可以看见有很多模块除了内容之外,在布局颜色等方面都是一样的,所以我可以开发一些模板或者插件,到时候直接插进主页里面去就行,然后内容数据就设置为可配置的形式。
模板就用ejs,于是我去了解了webpack中多个ejs生成html文件并且导入数据的方法。总结起来有2种。
ejs-loader
(1)在webpack.config.js中配置用ejs-loader解析ejs文件。(我只写了重要的部分,其它一些配置和插件我都没有写)
module: {
rules: [
{
test: /\.ejs$/,
use: {
loader: 'ejs-loader?variable=user',
}
}
]
},
plugins: [
//使用模板生成html文件
new HtmlWebpackPlugin({
data: haha,
filename:'index.html',
template: 'src/page/template.html',
title:'this is index',
chunks: ['index']
})
]
};
(2)然后在index.html文件的对应要插入的位置用id标示出来。(比如说我要在下面的id为header的div里面插入一个header.ejs)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="header"></div>
</body>
</html>
(3)header.ejs文件是这样的,里面有一些数据需要传进去。
<div><%= user.name %></div>
(4)在index.js里面调用模板,并且插到index.html文件里面去,就完成了。
var indexTpl = require('./header.ejs');
var user = {
name: '我是谁'
};
document.getElementById("header").innerHTML=indexTpl(user);
这样有一个缺点,就是打包出来的html文件里面没有要插入的内容,实际渲染的时候是在页面加载完成后通过js渲染的,这样的话会给浏览器造成一些压力,并且会拖慢页面的显示时间。
我们需要一个在打包前,就把模板加入到index.html文件里面去的方法。就是方法二。
ejs-compiled-loader
(1)在webpack.config.js中不用ejs-loader解析ejs文件,而是直接在HtmlWebpackPlugin插件中用ejs-compiled-loader解析ejs文件。由于没有用ejs-loader,所以后缀不能写成ejs,都改成html。(我只写了重要的部分,其它一些配置和插件我都没有写)
module: {
rules: [
{
test: /\.ejs$/,
use: {
loader: 'ejs-loader',
}
}
]
},
plugins: [
//使用模板生成html文件
new HtmlWebpackPlugin({
filename:'index.html',
template: 'ejs-compiled-loader!src/page/template.html',
title:'this is index',
chunks: ['index']
})
]
};
(2)然后在index.html文件的对应要插入的位置用ejs语言写出来。(比如说我要在下面的id为header的div里面插入一个header.html)
<% var user = {
name: '我是谁'
} %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<% include src/page/header.html %>
</body>
</html>
(3)header.html文件和刚才一样。
<div><%= user.name %></div>
(4)和刚才不一样的是,index.js什么都不需要做。
注意:上面是在html中直接用ejs语言引入数据的,但是也可以用js引入数据。代码需要修改如下:
//新建user.js文件
const user = {
name: '我是谁'
};
module.exports = user;
//在webpack.config.js中引入user.js
const user = require('./src/page/user.js');
plugins: [
new HtmlWebpackPlugin({
data: user, //引入user
filename:'index.html',
template: 'ejs-compiled-loader!src/page/template.html',
title:'this is index',
chunks: ['index']
})
]
//header.html文件中的变量变一下
<div><%= htmlWebpackPlugin.options.data.name %></div>
一个问题
上面的方法生成了一个完整的html文件,对于小的不需要经常改动的页面来说非常合适。
但是对于大的每天需要更新一次的B站来说呢?每天怎么更新?如果把数据结合写死在页面的话,就需要更新整个页面,显然不合适。
这个时候我脑光一现,想起了单web应用这本书的内容,那么为何不利用SPA的做法,用js来把页面导进去?
留着明天开发了。
仿B站项目(3)页面配置的更多相关文章
- 仿B站项目——(2)环境配置,文件目录
环境配置 主要参考入门Webpack,看这篇就够了,webpack入门和webpack实用配置. 实用开发环境 利用下面的webpack.json和webpack.config.js可以搭建一个使用e ...
- 仿B站项目——(1)计划,前端工程
计划 现打算: 计划用webpack打包 + 模板语言 + jquery + jquery ui + bootstrap做一个仿B站的静态网站. 网站兼容手机浏览器端. 部分模块打算仿照SPA用js加 ...
- 仿B站项目(4)webpack打包第三方库jQuery
概述 在项目中不可避免的会用到jquery等第三方库,来看看有什么问题,怎么解决. 遇到的问题 一般情况下,直接require第三方库,比如jquery,然后webpack会自动把第三方库打包进bun ...
- 07-08 Flutter仿京东商城项目 商品分类页面布局:Flutter仿京东商城项目 商品分类页面数据渲染
Flutter实战(交流群:452892873) 本项目是一个实战项目,根据目录建文件,并复制从第一节到最新更新的文章,可以构成完整的一个请求后台数据的项目: CateModel.dart class ...
- vue-cli项目多页面配置
参考 : https://www.jianshu.com/p/0a30aca71b16
- 37 Flutter仿京东商城项目 结算页面布局
加群452892873 下载对应34课文件,运行方法,建好项目,直接替换lib目录 CheckOut.dart import 'package:flutter/material.dart'; impo ...
- 25 Flutter仿京东商城项目 购物车页面布局
加群452892873 下载对应25课文件,运行方法,建好项目,直接替换lib目录,在往pubspec.yaml添加上一下扩展. cupertino_icons: ^0.1.2 flutter_swi ...
- 15 Flutter仿京东商城项目 搜索页面布局
Search.dart import 'package:flutter/material.dart'; import 'package:flutter_jdshop/services/ScreenAd ...
- 使用Vue-cli搭建多页面应用时对项目结构和配置的调整
前提:在这里使用的是webpack模板进行搭建 第一步.安装Vue-cli并且进行初始化 首先打开git,在里面使用npm全局安装Vue-cli,并且进行初始化 npm i vue-cli -g 然后 ...
随机推荐
- 【FZSZ2017暑假提高组Day1】华容道游戏
[问题描述] 华容道是一种有趣的滑块游戏,大概是下面这个样子的. 游戏局面由一个2*2的曹操滑块,五个2*1的蜀将滑块(横竖是不定的).四个1*1的小兵滑块以及两个空的位置构成,玩家需要利用空的位子移 ...
- Unity3D AssetBundle相关
Unity3D AssetBundle相关 首先,先看一下原理吧 Unity3D研究院之Assetbundle的原理(六十一) 其次,接着往下看:Unity3D研究院之Assetbundle的实战( ...
- P1880 [NOI1995]石子合并-(环形区间dp)
https://www.luogu.org/problemnew/show/P1880 解题过程:本次的题目把石子围成一个环,与排成一列的版本有些不一样,可以在后面数组后面再接上n个元素,表示连续n个 ...
- mongodb异常恢复
构造mongdb异常 启动mongodb,bash mongodb.sh #!/bin/bash pid_file=/var/run/mongodb/mongod.pid pid_dir=/var/r ...
- Python设计模式 - UML - 组件图(Component Diagram)
简介 组件图又称构建图,用于显示系统各组件及各组件关系的物理视图. 组件图通常包括组件.接口.关系.端口和连接器,用来显示程序代码中相应的模块.源文件或源文件集合之间的依赖和泛化关系. 组件图中的组件 ...
- python 之C3算法
C3算法只要针对的Python2.3版本之后出现的新式类MRO(method resolution order) -------继承方法查询顺序;而经典类MRO则遵循的是深度优先遍历(树形结构) (1 ...
- 169. Majority Element (Array)
Given an array of size n, find the majority element. The majority element is the element that appear ...
- 129. Sum Root to Leaf Numbers pathsum路径求和
[抄题]: Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a ...
- java 期末考试复习
//Scanner这样写? Scanner input = new Scanner(System.in); //不断获得下一个单词 names[i] = toTitleCase(input.nex ...
- Linux知识扩展二:lsof命令
转:https://www.cnblogs.com/the-study-of-linux/p/5501593.html 1. lsof :list open file 显示linux下打开的文件信息. ...