搜索
首页web前端html教程基于webpack的前端工程化开发解决方案探索(一):动态生成HTML_html/css_WEB-ITnose

  Hello,大家好!在前面三章中我们与大家分享如何使用webpack来完成前端的模块化打包工作,并附带了一些简单的案例实现,算是webpack的一个入门吧。

从这一章开始,我们将陆续为大家介绍如何使用webpack来完成前端工程化开发。

 

  1.什么是工程化开发

  软件工程的工程化开发概念由来已久,但对于前端开发来说,我们没有像VS或者eclipse这样量身打造的IDE,因为在大多数人眼中,前端代码无需编译,因此只要一个浏览器来运行调试就行了。但是时至今日,互联网特别是移动互联网为前端开发带来了更大的机会,同时前端代码也变得越来越复杂,越来越难以管理,因此前端工程化开发的工作可以说是刻不容缓。

  那么前端工程化开发到底需要解决哪些前端工程师们火烧眉毛的问题呢?个人认为至少包含以下几点:

  1. 专业的IDE支持,完成包括项目初始化,语法提示,项目编译,打包等工作。

  2. 良好的模块化代码管理结构,模块化可以使我们编写的组件或者代码达到高度复用,降低代码间的耦合性;同时可以良好的与第三方组件兼容。

  3. 简单易配置的前端测试环境,完成组件的单元测试,页面的集成测试;同时提供良好的DEBUG环境,可以很好的定位错误的所在以及错误的详细信息。

  4. 静态资源(图片/字体/CSS/JS等)的良好管理方案,一是静态的文件版本问题,二是对于小图标自动转BASE64,减少HTTP请求

  5. 完整的代码版本管理,打包,发布,多环境部署,测试反馈等运维支持

  

  当然,以上只是个人意见。每个公司、每个项目的情况不一样,所需要的条件都会有所不同。

  以上这些需求,在以前基本上都是不敢想象的,这些工具都需要访问文件系统或者网络,很少有比较完整的解决方案。(好了,早期也有类似于Ant这样的Java解决方法,对前端开发人员要求过高而且不是很好用)好在,伟大的NodeJs诞生了,于是乎,基于NodeJs出现了很多优秀框架,像Grunt和 Gulp等。

  好了,今天的主题是webpack!让我们来看下webpack作为后起之秀,是如何对前端工程化进行支持的!

  

   2. 动态生成HTML

  大家注意,这里所说的动态生成HTML,是指我们使用webpack来动态产生我们最终所期望的HTML文件,而不是指在浏览器运行时使用JS生成HTML片段。

  那为什么要动态生成HTML,我自己写不行吗?答案当然是可以的。

  之所以要动态生成,主要是希望webpack在完成前端资源打包以后,自动将打包后的资源路径和版本号写入HTML中,达到自动化的效果。

  大家可以回想一下我们之前的三篇文章中介绍的案例,在那个练手的项目中,我们页面上的script标签是我们自己写的,那么如果我们需要给JS添加上版本号的话,岂不是每次都的去修改?还有CSS,都是内嵌在JS中的,待JS加载后再创建style标签,然后写入css内容。这么做的话,浏览器需要先等待JS加载完成后,才能生成CSS样式,页面上会有一个等待过程,这个过程页面是完全没有样式的。这当然不是我们所想要的。

  我们的目标是:webpack根据指定的模板,插入打包编译后CSS文件路径;插入打包生成的JS的文件路径。并且还需要为二者添加版本号。另外,我们还可以同时将HTML进行压缩,进一步减少文件大小。

  

  3.初始化项目、安装依赖

  我们这里默认大家的开发环境已经安装了npm以及webpack,尚未安装的同学可以自行安装。

  A.新建一个空项目,然后通过   npm  init     对项目进行初始化,按照提示输入项目的基本信息,然后生成package.json文件。这个文件里面会保存我们即将安装的一些npm插件信息,便于二次移植开发。

  B.安装项目所需依赖:

    npm install css-loader jquery@1 style-loader html-webpack-plugin --save-dev 
  npm install extract-text-webpack-plugin --save-dev   
  

  依次为css加载器,jquery,style加载器,HTML生成插件以及文件提取插件。

  最终package.json的依赖声明得到更新:

 

"devDependencies": {    "css-loader": "^0.23.0",    "extract-text-webpack-plugin": "^0.9.1",    "html-webpack-plugin": "^1.7.0",    "jquery": "^1.11.3",    "style-loader": "^0.13.0",    "webpack": "^1.12.9",    "webpack-dev-server": "^1.14.0" }

 

  

  4. 创建目录,添加测试文件

  准备就绪,我们开始创建项目目录:

 

- webapp    - src                #代码开发目录        - css            #css目录,按照页面(模块)、通用、第三方三个级别进行组织            + page            + common            + lib        + img            #图片资源        - js            #JS脚本,按照page、components进行组织            + page        + view            #HTML模板    - dist                #webpack编译打包输出目录,同样按照css/js/img进行组织        + css                        + js        + view    + node_modules        #所使用的nodejs模块    package.json        #项目配置    webpack.config.js    #webpack配置    README.md            #项目说明

 

  dist目录也可以不创建任何子目录,这里为了方便查看,将js/css/html分开存放。

  然后我们在src目录创建几个测试文件,详细的代码大家可以前往 https://github.com/xiaoyunchen/webpack/tree/master/src  查看源码。

  我们先来看下index.js的内容:

1 //引入CSS2 require("../../css/lib/reset.css");3 require("../../css/common/global.css");4 require("../../css/page/index.css");5 6 document.write('Hello Index Js');

  代码很简单,主要是引入了几个css文件。再看下我们的 /view/index.html 这个模板的内容

<!DOCTYPE html><html>    <head>        <meta charset="utf-8">        <title>Index主页</title>        <meta name="author" content="https://github.com/xiaoyunchen/webpack"/>        <meta name="date" content="2015-12-3"/>        <meta name="description" content="基于webpack的前端工程化开发解决方案探索"/>        <!--            作者:https://github.com/xiaoyunchen/webpack            时间:2015-12-03            描述:head中无需再引入css以及facicon,webpack将根据入口JS文件的要求自动实现按需加载或者生成style标签        -->    </head>    <body>        <p>Hello,Webpack!!</p>        <!--            作者:chyun532@qq.com            时间:https://github.com/xiaoyunchen/webpack            描述:body中同样无需单独引入JS文件,webpack会根据入口JS文件自动实现按需加载或者生成script标签,还可以生成对应的hash值        -->    </body></html>

  这是一个简单的HTML模板,值得一提的是我们在这里并没有引入任何的CSS和JS,我们希望通过webpack打包来自动生成。(这里的模板还支持 Blueimp)

  

  5. webpack配置

  最后是我们的重头戏,webpack.config.js,我们将在这里配置一些webpack任务,来完成我们的需求:

 1 var path=require('path'); 2 var webpack = require('webpack'); 3 var ExtractTextPlugin = require("extract-text-webpack-plugin"); 4 var HtmlWebpackPlugin = require('html-webpack-plugin'); 5 module.exports={ 6     entry:{ 7             index:"./src/js/page/index.js", 8         }, 9     output:{10         path: path.join(__dirname,'dist'),11         publicPath: "/webpack/dist/",12         filename: "js/[name].js",13         chunkFilename: "js/[id].chunk.js"14     },15     module: {16         loaders: [    //加载器17             {test: /\.css$/, loader:ExtractTextPlugin.extract("style", "css") }18         ]19     },20     plugins:[21         new ExtractTextPlugin("css/[name].css"),    //单独使用style标签加载css并设置其路径22         new HtmlWebpackPlugin({                        //根据模板插入css/js等生成最终HTML23             favicon:'./src/img/favicon.ico', //favicon路径24             filename:'/view/index.html',    //生成的html存放路径,相对于 path25             template:'./src/view/index.html',    //html模板路径26             inject:true,    //允许插件修改哪些内容,包括head与body27             hash:true,    //为静态资源生成hash值28             minify:{    //压缩HTML文件29                 removeComments:true,    //移除HTML中的注释30                 collapseWhitespace:false    //删除空白符与换行符31             }32         })33     ]34 };

 

  这个配置文件再之前的文章中我们已经讲过很多次了,这里就不在赘述,只对其中几点比较关键的点进行分析:

  17行:css加载器,只是这里改用了文件提取插件,将css提取出来单独作为一个文件进行存储。

  21行:配置提取出来的css文件名以及存放路径

  22行: html-webpack-plugin 这是webpack中生成HTML的插件,里面有详细的配置说明,大家可以前往查看。

    23行:配置favicon,通过webpack引入同时可以生成hash值

    24行:配置最终生成HTML文件存放路径

    25行:我们所使用的模板

    26行:允许webpack修改哪些内容,可选值为head和body,true的话是都可以修改

    27行:为静态资源生成hash值

    28行:压缩最终生成的HTML文件,相关配置参数请前往 html-minifer 查看。(这里为了方便后面查看,没有移除HTML中的空白符与换行符。)

  OK,下面我们在项目的根目录下运行 webpack 打包命令完成项目打包:

  

  打包成功后,我们前往/dist/view目录下查看生成的index.html是什么样

<!DOCTYPE html><html>    <head>        <meta charset="utf-8">        <title>Index主页</title>        <meta name="author" content="https://github.com/xiaoyunchen/webpack">        <meta name="date" content="2015-12-3">        <meta name="description" content="基于webpack的前端工程化开发解决方案探索">            <link rel="shortcut icon" href="/webpack/dist/favicon.ico?69fed78822d5f8d3895c"><link href="/webpack/dist/css/index.css?69fed78822d5f8d3895c" rel="stylesheet"></head>    <body>        <p>Hello,Webpack!!</p>            <script src="/webpack/dist/js/index.js?69fed78822d5f8d3895c"></script></body></html>

  可以看到生成的文件除了保留原模板中的内容以外,还根据入口文件index.js的定义,自动添加需要引入CSS与JS文件,以及favicon,同时还添加了相应的hash值。

  运行这个文件,可以看到代码正常,引入的文件路径也都OK!

  是的,我们最初想要通过动态生成HTML的目的达到了。

  webpack根据指定的模板,插入打包编译后CSS文件路径;

  插入打包生成的JS的文件路径。并且还需要为二者添加版本号。

  另外,我们还可以同时将HTML进行压缩,进一步减少文件大小。

 

  今天的分享就到这里。可能大家还有些疑问:按需加载的JS/CSS也会被提取出来吗?下一章我们将继续探索这个问题。

 

  

  

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
HTML:建立网页的结构HTML:建立网页的结构Apr 14, 2025 am 12:14 AM

HTML是构建网页结构的基石。1.HTML定义内容结构和语义,使用、、等标签。2.提供语义化标记,如、、等,提升SEO效果。3.通过标签实现用户交互,需注意表单验证。4.使用、等高级元素结合JavaScript实现动态效果。5.常见错误包括标签未闭合和属性值未加引号,需使用验证工具。6.优化策略包括减少HTTP请求、压缩HTML、使用语义化标签等。

从文本到网站:HTML的力量从文本到网站:HTML的力量Apr 13, 2025 am 12:07 AM

HTML是一种用于构建网页的语言,通过标签和属性定义网页结构和内容。1)HTML通过标签组织文档结构,如、。2)浏览器解析HTML构建DOM并渲染网页。3)HTML5的新特性如、、增强了多媒体功能。4)常见错误包括标签未闭合和属性值未加引号。5)优化建议包括使用语义化标签和减少文件大小。

了解HTML,CSS和JavaScript:初学者指南了解HTML,CSS和JavaScript:初学者指南Apr 12, 2025 am 12:02 AM

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

HTML的角色:构建Web内容HTML的角色:构建Web内容Apr 11, 2025 am 12:12 AM

HTML的作用是通过标签和属性定义网页的结构和内容。1.HTML通过到、等标签组织内容,使其易于阅读和理解。2.使用语义化标签如、等增强可访问性和SEO。3.优化HTML代码可以提高网页加载速度和用户体验。

HTML和代码:仔细观察术语HTML和代码:仔细观察术语Apr 10, 2025 am 09:28 AM

htmlisaspecifictypefodyfocusedonstructuringwebcontent,而“代码” badlyLyCludEslanguagesLikeLikejavascriptandPytyPythonForFunctionality.1)htmldefineswebpagertuctureduseTags.2)“代码”代码“ code” code code code codeSpassSesseseseseseseseAwiderRangeLangeLangeforLageforLogageforLogicIctInterract

HTML,CSS和JavaScript:Web开发人员的基本工具HTML,CSS和JavaScript:Web开发人员的基本工具Apr 09, 2025 am 12:12 AM

HTML、CSS和JavaScript是Web开发的三大支柱。1.HTML定义网页结构,使用标签如、等。2.CSS控制网页样式,使用选择器和属性如color、font-size等。3.JavaScript实现动态效果和交互,通过事件监听和DOM操作。

HTML,CSS和JavaScript的角色:核心职责HTML,CSS和JavaScript的角色:核心职责Apr 08, 2025 pm 07:05 PM

HTML定义网页结构,CSS负责样式和布局,JavaScript赋予动态交互。三者在网页开发中各司其职,共同构建丰富多彩的网站。

HTML容易为初学者学习吗?HTML容易为初学者学习吗?Apr 07, 2025 am 12:11 AM

HTML适合初学者学习,因为它简单易学且能快速看到成果。1)HTML的学习曲线平缓,易于上手。2)只需掌握基本标签即可开始创建网页。3)灵活性高,可与CSS和JavaScript结合使用。4)丰富的学习资源和现代工具支持学习过程。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。