仿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 然后 ...
随机推荐
- 《DOM Scripting》学习笔记-——第二章 js语法
<Dom Scripting>学习笔记 第二章 Javascript语法 本章内容: 1.语句. 2.变量和数组. 3.运算符. 4.条件语句和循环语句. 5.函数和对象. 语句(stat ...
- 设置同一个域名同一个源通过cdn用不同的端口访问网站设置
下图例子是设置80和88访问,因为80是默认的访问,所以只要设置88就行 进入站点管理-->应用防火墙-->高级设置 这个设置用到了url和host模块 在站点设置里设置要用到的端口:
- Python设计模式 - UML - 组件图(Component Diagram)
简介 组件图又称构建图,用于显示系统各组件及各组件关系的物理视图. 组件图通常包括组件.接口.关系.端口和连接器,用来显示程序代码中相应的模块.源文件或源文件集合之间的依赖和泛化关系. 组件图中的组件 ...
- FortiGate防火墙对数据包处理流程
1.流程图 2.防火墙对数据包处理过程的各步骤如下: 1)Interface(网卡接口) 网卡接口驱动负责接数收据包,并转交给下一过程. 2)DoS Sensor(DoS防御,默认关闭) 负责过滤SY ...
- python note 07 集合
1.删除特例 lis = [11,22,33,44,55] for i in range(len(lis)): print(i) del lis[i] print(lis) #每删除链表中一个值链表就 ...
- Mysql的时间类型问题
时间类型有time, date, datetime, timestamp 如Mysql官方文档所述: time 没有date,date没有time,datetime是date和time的集合, 而ti ...
- convert 函数的使用
先说问题:今天项目中很多模块出现了一个集体性的问题,时间检索时选择同一天 检索不出数据(表中数据确实存在),其实这个问题在做东西的时候领导说过,记忆中我解决了,但是后来写代码可能把这个问题忘记了! 其 ...
- nodejs+https 使用openssl (window)
HTML的getUsermedia必是要安全的连接 比如 localhost.127.0.0.1 .https chrome才让调用摄像头 1.申请域名.备案.域名解析 2.openssl生成 打开g ...
- SecureCRT问题
使用SecureCRT 与虚拟机进行通信,提示The remote system refused the connection 解决:由于缺少SSH服务器端 sudo apt-get install ...
- pytbull:入侵检测/预防系统测试框架 (转)
pytbull:入侵检测/预防系统测试框架 或许当你安装了 IDS/IPS(入侵检测/预防系统)之后就感觉系统安全无忧了,但如何确信?答案是测试.pytbull 是使用 Python 开发而成的 ID ...