搜索
首页web前端html教程前端项目结构设计精细方案_html/css_WEB-ITnose

开始的开始,前端项目很简单,html放外面,然后新建一个css和js文件夹,看起来很清晰。

随着时间推进,项目变大,问题开始一一出现了:

  • html 太多,找起来麻烦
  • css 和 js 需要压缩
  • css 和 js需要发布到 CDN
  • 开始只简单依赖一个jQuery,后来发现依赖的插件越来越多,不好更新维护
  • html 里面怎么实现公共一个头
  • js和css包含大量重复代码,怎么重构项目
  • 前端如何把代码交付给后端填模板代码
  • 很多公司面对这些问题都有了自己的方案,Node 因为语言也是JS,成了很多公司的首选。

    相关的热门框架有grunt,gulp,webpack,bower等等。

    愿意读文档的人早以用上这些新奇玩意儿并且解决了大量前端问题。

     

    虽然工具很多,但对于很多新团队来说,如何完美地规划项目却仍然是一道坎。

    他们不知道应该在何时,如何使用这些工具。前端项目的设计可以非常随意,正是这些随意,让很多人在选择中开始迷茫。

     

    本文将提供一个趋于完美的前端项目结构规划方案,希望能为各位在重构前端项目时提供帮助。

    一个规划方案,并不只是定义文件怎么放,文件怎么命名,而更重要的是包含实现整个流程的工具,如果没有工具支持,所有方案都是扯淡。

     

    前端项目结构

    根目录  |- assets:  存放所有js和css等,这些资源可能发布到 CDN  |  |- images: 存放所有 CSS 样式需要的背景图片<br />  |  |- fonts: 存放所有 CSS 样式需要的字体  |  |- styles: 存放所有CSS<br />  |  |  |- common: 存放公共的 CSS 代码  |  |- scripts: 存放所有 JS<br />  |  |  |- common: 存放公共的 JS 代码  |- include:  存放所有公共的 HTML 头尾片段  |- images:  存放前景图片和flash  |- libs:  存放前端所需的第三方类库  |- views:  如果使用了后端 MVC 框架,则页面放在这里。  |- _my:  存放开发者自己需要的文件,这个文件夹应该被 GIT 和 SVN 忽略掉。  |- page1.html 存放最终的前端页面,如果使用了 MVC 框架则不需要。

    HTML 文档结构

    <!DOCTYPE html><html><head>    <meta charset="utf-8" />    <title>标题</title>    <!-- #include virtual="/include/header.inc" -->    <link rel="stylesheet" type="text/css" href="assets/styles/common/blog.css" />    <link rel="stylesheet" type="text/css" href="assets/styles/page2.css" /></head><body>    <!-- #include virtual="/include/body.inc" -->    内容    <!-- #include virtual="/include/footer.inc" -->    <script type="text/javascript" src="assets/scripts/common/blog.js"></script>    <script type="text/javascript" src="assets/scripts/page2.js"></script>    <!-- #include virtual="/include/stat.inc" --></body></html>

    /include/header.inc:

        <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />    <meta name="viewport" content="width=device-width, initial-scale=1, minimal-ui, maximum-scale=1, user-scalable=no" />    <meta name="apple-itunes-app" content="app-id, app-argument=">    <meta name="description" content="" />    <meta name="keywords" content="" />    <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="" />    <link rel="shortcut icon" href="favicon.ico" />    <link rel="apple-touch-icon" href="favicon.png">    <link rel="stylesheet" type="text/css" href="../assets/styles/common/common.css" />

    /include/body.inc:

    这里可以放一些全站公用的页头,比如需要为全站加一个紧急通知的 banner,可以加在这里。

    <!--[if lt IE 9]><div role="alert">你的浏览器实在<strong>太太太太太太旧了</strong>,放学别走,升级完浏览器再说 <a target="_blank" class="alert-link" href="http://browsehappy.com">立即升级</a></div><![endif]-->

    这里可以放一些全站公用的页脚,比如版权声明之类。

    <div>版权所有 @copy; 2015 xuld</div><script type="text/javascript" src="assets/scripts/common/common.js"></script>

    /include/stat.inc:

    这里可以放一些网站统计代码。

    <!-- 在这里添加网站统计代码 --><br />

    其它文件

    如果项目里还有公共的侧边栏、广告位等,也可以自行在 include 添加其它文件。

    如果一个网站需要有多种不同版权声明,可以分别做一个 footer-full.inc 和 footer-simple.inc,然后公共包含:footer-common.inc。

    静态资源引用

    如果项目里需要使用 less/sass/coffee 等技术,则可以直接引用这些文件。发布时,发布工具完成这些事情:

    1. 编译 less/sass/coffee 文件,转换为对应的 css/js 文件。

    2. 更新 HTML 文件里的资源引用地址,引用生成好的 css/js 文件。

    3. 为这些资源文件引用地址添加时间戳。

    4. 如果项目使用了 CDN,则发布工具应该自动上传文件到 CDN,并更改文件里的路径为 CDN 的地址。

    发布前:

    <link rel="stylesheet" type="text/css" href="../assets/styles/page1.less" />

    发布后:

    <link rel="stylesheet" type="text/css" href="http://cdn.com/project/assets/styles/page1.css?_=md5" />

    时间戳问题

    静态文件由于存在缓存,每次发布如果保持路径不变,很容易导致页面不更新。有三种方案:

    1. 为路径加上 ?_=md5
    2. 更新文件名为 page1_md5.js
    3. 复制到名为 20151021 的文件夹

    个人建议使用方案1,因为改动量少,不易出错。但如果CDN不支持,可以采用其它方案。

    脚本和样式

    如果项目中,一个人专门负责 css,一个人专门负责 js,一个人专门负责将 html 转换为后台代码,则上述文件夹结构是比较合理的。

    如果是同一个人负责css和js,则建议不区分 styles 和 scripts 文件夹,直接放在 assets 目录。

    如果连转换html 到后台代码都是同一个人,则建议将 css 和 js 直接写在页面里,发布工具负责提取出来:

    <style __dest="assets/styles/page1.css">   /*  CSS 代码 */</style>

    公共代码依赖

    每个HTML页面,都必须引3个js和3个css,分别是:

  • 全站公用的 js:common/common.js
  • 全项目(或类似页面,比如列表页、详情页)公用的js:common/blog.js
  • 页面私有的js:common/page1.js
  • css 和 js处理方式一致,且一一对应。

    个别页面可以引入一些外部的js和css,比如 editor.js 这种比较大的文件。但原则上每个文件最多只能引 5个js和5个css。需要引的文件多时则需要打包合并。

    出于性能考虑,有时候可以将页面私有的js和css直接内联到页面。

    <script src="assets/page1.js?__inline"></script>

    模块化组件

    所有可复用组件、第三方框架都放在 libs,libs 文件发布时会被忽略掉,项目里也不能直接引用 libs 下的代码。

    如果需要引用一个组件,有三种方案:

  • 简单的文件包含
  • 基于 CommonJS 模块化方案
  • 基于其它模块化方案
  • 简单的文件包含

    如果项目较小,并不需要太大模块化东西,直接使用文件包含是最方便的:

    common.js

    // #include /libs/3rdlibs/jquery-2.1.0.js// #include /libs/3rdlibs/jquery.mobile.js<br /><br /><br />// 其它项目需要的公共代码

    发布工具会处理 #include 。

    CommonJS 模块化方案

    var $ = require('libs/3rdlibs/jquery');

    发布后,CommonJs 模块会被转换为标准的 AMD 模块。

    打包问题

    假设一个页面需要引用 common.js 和 page1.js ,而这2个js又分别引用了 libs 下的若干个组件(可能有重复)

    那么 page1.js 可以添加如下指令排除掉 common.js 所引入的文件

    // #exclude common.jsvar $ = require('libs/3rdlibs/jquery');

    最后生成的代码,page1.js 将包含所有所需的模块,并删除了 common.js 包含的模块。

    项目发布和调试

    以上所介绍的代码方案是不能直接在浏览器运行的,这里有三个方案可以实现本文所描述的各个功能:

    1. 在浏览器执行 JS 实现上文所描述的所有功能。优点:兼容性好,缺点:效率低。
    2. 监听文件改变,文件保存后就解析以上指令并生成文件。优点:兼容性好,处理方便,缺点:不稳定。
    3. 自定义服务器,这个服务器在请求时自动完成生成任务。优点:效率高且稳定,缺点:需要定制服务器,且只在开发时使用。

    其它工具支持

    占位图

    对应经常切页面的哥们,占位图是非常有用的。

    <img  src="/static/imghwm/default1.png"  data-src="@100x100.jpg"  class="lazy" alt="前端项目结构设计精细方案_html/css_WEB-ITnose" >

    Ajax 接口模拟

    a.njs:

    writeJsonp({    a: 1});

     

    写在最后

    本文所描述的是一种建议的做法,也是一个发布工具所需要提供的功能。每个团队可以针对自己的需求做一些个别的定制。本文所提到的示例都是以 tpack 为原型书写的。不同的工具会有稍微不同的写法。但是其解决的问题是一样的。

    声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
    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)丰富的学习资源和现代工具支持学习过程。

    HTML中起始标签的示例是什么?HTML中起始标签的示例是什么?Apr 06, 2025 am 12:04 AM

    AnexampleOfAstartingTaginHtmlis,beginSaparagraph.startingTagSareEssentialInhtmlastheyInitiateEllements,defiteTheeTheErtypes,andarecrucialforsstructuringwebpages wepages webpages andConstructingthedom。

    如何利用CSS的Flexbox布局实现菜单中虚线分割效果的居中对齐?如何利用CSS的Flexbox布局实现菜单中虚线分割效果的居中对齐?Apr 05, 2025 pm 01:24 PM

    如何设计菜单中的虚线分割效果?在设计菜单时,菜名和价格的左右对齐通常不难实现,但中间的虚线或点如何...

    在线代码编辑器究竟用什么HTML元素实现代码输入?在线代码编辑器究竟用什么HTML元素实现代码输入?Apr 05, 2025 pm 01:21 PM

    网页代码编辑器中的HTML元素分析许多在线代码编辑器允许用户输入HTML、CSS和JavaScript代码。最近,有人提出了一...

    React静态页面构建:如何用react-app-rewired避免代码压缩?React静态页面构建:如何用react-app-rewired避免代码压缩?Apr 05, 2025 pm 01:18 PM

    关于使用react-app-rewired构建静态页面时如何避免代码压缩许多开发者在使用React构建静态页面时,希望在交付给�...

    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中的所有内容
    3 周前By尊渡假赌尊渡假赌尊渡假赌

    热工具

    mPDF

    mPDF

    mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

    SublimeText3 Linux新版

    SublimeText3 Linux新版

    SublimeText3 Linux最新版

    螳螂BT

    螳螂BT

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

    SublimeText3汉化版

    SublimeText3汉化版

    中文版,非常好用

    安全考试浏览器

    安全考试浏览器

    Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。