最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

webpack多页面开发实践

来源:懂视网 责编:小采 时间:2020-11-27 22:23:30
文档

webpack多页面开发实践

webpack多页面开发实践:写在前面 webpack是一款模块加载器兼打包工具,能把js,css,页面,图片,视频等各种资源,进行模块化处理。而现在网上流传很多单页面的webpack模型,那多页面呢?比较少,现在我提供一个多页面的前端模型。希望大家适合使用。 在最开始接触webpack的时
推荐度:
导读webpack多页面开发实践:写在前面 webpack是一款模块加载器兼打包工具,能把js,css,页面,图片,视频等各种资源,进行模块化处理。而现在网上流传很多单页面的webpack模型,那多页面呢?比较少,现在我提供一个多页面的前端模型。希望大家适合使用。 在最开始接触webpack的时

写在前面

webpack是一款模块加载器兼打包工具,能把js,css,页面,图片,视频等各种资源,进行模块化处理。而现在网上流传很多单页面的webpack模型,那多页面呢?比较少,现在我提供一个多页面的前端模型。希望大家适合使用。

在最开始接触webpack的时候,我都觉得webpack只适用于单页面应用,比如webpack+react,webpack+vue。我自己在使用webpack+vue构建项目及开发的过程中感受到了webpack的强大和方便。基于实际项目需求,我在想,多页面站点是否也能使用webapck来构建呢?于是就开始了一番探索,最终算是搭建了一套比较完整的解决方案。

本文以一个实际项目为例子,讲述在多页面项目中如何使用webpack进行工程化构建。本文是自己的实践经验总结,所以有些解决方案并不是最优的,仍在探索优化中,如果有什么错误纰漏,欢迎指出。

简介

本项目主要基于webpack2.x构建,以gulp作为辅助工具。前端使用art-template作为模板引擎,一个页面对应一个模板文件和一个入口文件,入口文件中可以通过import或require引入其他模块,这些模块webpack会自动跟入口文件合并为一个文件。

前端开发环境搭建

主要目录结构

├─dist #打包后生成的文件目录
└─src #开发目录
 ├─components #通用组件
 ├─static #静态资源目录
 │ ├─css
 │ ├─img
 │ └─js
 │ ├─component #站点通用组件对应的js
 │ ├─lib #第三方js库
 │ ├─services #各页面入口
 │ └─util #通用工具js
 ├─template #html模板
 └─views #页面
 main.js #公共入口
gulpfile.js #gulp任务配置
package.json #项目依赖
webpack.config.js #webpack配置

webpack配置

入口文件

// 获取入口文件
var entries = (function() {
 var jsDir = path.resolve(__dirname, 'src/static/js/services');
 var entryFiles = glob.sync(jsDir + '/*.js');
 var map = {};

 entryFiles.forEach(function(filePath) {
 var filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'));
 map[filename] = filePath;
 });
 return map;
})();

该方法将生成文件名到文件绝对路径的map, 比如

entry: {
 'page-1': '/../webpack-multipage-demo/src/static/js/services/page-1.js'
}

热更新

热更新简直不要太好用,极大地提高了开发效率。

//服务器配置
var devServer = env === 'production' ? {} : {
 contentBase: path.resolve(__dirname),
 compress: true,
 historyApiFallback: true,
 hot: true,
 inline: true,
 host: 'localhost', 
 port: 8080
};

另外,在plugin中加入new webpack.HotModuleReplacementPlugin(),开启Hot Module Replacemen,即可实现热更新。

生成html配置

约定同一页面的js文件与模板文件命名一致,最终根据该js生成与其同名的html文件。

var htmlPages = (function() {
 var artDir = path.resolve(__dirname, 'src/views');
 var artFiles = glob.sync(artDir + '/*.art');
 var array = [];
 artFiles.forEach(function(filePath) {
 var filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'));
 array.push(new HtmlWebpackPlugin({
 template: path.resolve(__dirname, 'src/template/index.html'),
 filename: filename + '.html',
 chunks: ['vendor', 'main', filename],
 chunksSortMode: function(chunk1, chunk2) {
 var order = ['vendor', 'main', filename];
 var order1 = order.indexOf(chunk1.names[0]);
 var order2 = order.indexOf(chunk2.names[0]);
 return order1 - order2;
 },
 minify: {
 removeComments: env === 'production' ? true : false,
 collapseWhitespace: env === 'production' ? true : false
 }
 }));
 });
 return array;
})();

通用模块提取为组件

对于一些在多个页面中都需要用到的模块,可将其提取出来作为通用的组件。组件的构成与页面一样,一个.js文件和一个.art文件以及一个.css文件,在js文件中渲染html内容,最后export,使用时直接require即可。具体实践可参考demo

存在问题

  1. 每新建一个页面就需要重新启动webpack服务
  2. 字体文件无法压缩,对于压缩通过font-face引入的网络字体,目前没有找到较好的解决方案

demo

基于本文理论的一个demo,地址:webpack-multipage-demo

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

webpack多页面开发实践

webpack多页面开发实践:写在前面 webpack是一款模块加载器兼打包工具,能把js,css,页面,图片,视频等各种资源,进行模块化处理。而现在网上流传很多单页面的webpack模型,那多页面呢?比较少,现在我提供一个多页面的前端模型。希望大家适合使用。 在最开始接触webpack的时
推荐度:
标签: 开发 实战 实践
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top