目录
前端项目结构
HTML 文档结构
/include/header.inc:
/include/body.inc:
/include/footer.inc:
/include/stat.inc:
其它文件
静态资源引用
发布前:
发布后:
时间戳问题
脚本和样式
公共代码依赖
模块化组件
简单的文件包含
CommonJS 模块化方案
打包问题
项目发布和调试
其它工具支持
占位图
Ajax 接口模拟
a.njs:
写在最后
首页 web前端 html教程 前端项目结构设计精细方案_html/css_WEB-ITnose

前端项目结构设计精细方案_html/css_WEB-ITnose

Jun 24, 2016 am 11:34 AM

开始的开始,前端项目很简单,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/imghw/default1.png"  data-src="@100x100.jpg"  class="lazy" alt="前端项目结构设计精细方案_html/css_WEB-ITnose" >
    登录后复制

    Ajax 接口模拟

    a.njs:

    writeJsonp({    a: 1});
    登录后复制

     

    写在最后

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

    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    Video Face Swap

    Video Face Swap

    使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

    热工具

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器

    SublimeText3汉化版

    SublimeText3汉化版

    中文版,非常好用

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    Dreamweaver CS6

    Dreamweaver CS6

    视觉化网页开发工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神级代码编辑软件(SublimeText3)

    热门话题

    Java教程
    1662
    14
    CakePHP 教程
    1418
    52
    Laravel 教程
    1311
    25
    PHP教程
    1261
    29
    C# 教程
    1234
    24
    HTML容易为初学者学习吗? HTML容易为初学者学习吗? Apr 07, 2025 am 12:11 AM

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

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

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

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

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

    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 18, 2025 am 12:09 AM

    HTML、CSS和JavaScript在Web开发中的作用分别是:1.HTML定义网页结构,2.CSS控制网页样式,3.JavaScript添加动态行为。它们共同构建了现代网站的框架、美观和交互性。

    HTML的未来:网络设计的发展和趋势 HTML的未来:网络设计的发展和趋势 Apr 17, 2025 am 12:12 AM

    HTML的未来充满了无限可能。1)新功能和标准将包括更多的语义化标签和WebComponents的普及。2)网页设计趋势将继续向响应式和无障碍设计发展。3)性能优化将通过响应式图片加载和延迟加载技术提升用户体验。

    HTML与CSS vs. JavaScript:比较概述 HTML与CSS vs. JavaScript:比较概述 Apr 16, 2025 am 12:04 AM

    HTML、CSS和JavaScript在网页开发中的角色分别是:HTML负责内容结构,CSS负责样式,JavaScript负责动态行为。1.HTML通过标签定义网页结构和内容,确保语义化。2.CSS通过选择器和属性控制网页样式,使其美观易读。3.JavaScript通过脚本控制网页行为,实现动态和交互功能。

    HTML,CSS和JavaScript的未来:网络开发趋势 HTML,CSS和JavaScript的未来:网络开发趋势 Apr 19, 2025 am 12:02 AM

    HTML的未来趋势是语义化和Web组件,CSS的未来趋势是CSS-in-JS和CSSHoudini,JavaScript的未来趋势是WebAssembly和Serverless。1.HTML的语义化提高可访问性和SEO效果,Web组件提升开发效率但需注意浏览器兼容性。2.CSS-in-JS增强样式管理灵活性但可能增大文件体积,CSSHoudini允许直接操作CSS渲染。3.WebAssembly优化浏览器应用性能但学习曲线陡,Serverless简化开发但需优化冷启动问题。

    See all articles