# 目录结构及HTML模板
# 基本目录结构
project
├── package.json # 项目package文件,可以自行安装扩展npm功能包
├── cyb.config.js # cyb功能配置文件
├── .babelrc # babel配置文件(可自行安装插件扩展配置)
├── webpack.config.js # webpack配置文件(可选)
└── src
├── static #(建议将静态资源部署到此目录)
│ ├── fonts
│ ├── images
│ └── styles
│ └── 页面名称.{css,less,sass,styl} # 必须在styles根目录入口样式才会被编译(可选的样式部署方式)
└── views
├── 页面名称 # 页面目录名
│ ├── index.html # 必须以index命名
│ ├── index.js # 必须以index命名
│ ├── index.{css,less,sass,styl} # 必须以index命名(可选的样式部署方式)
│ └── folder #可以自定义创建目录(用于存放模块级别的js/样式/字体/图片等,通过webpack的import方式引入)
└── public # 公共文件目录(可选)
└── folder # 可以自定义创建目录(可选)
为了提高项目的功能扩展和可维护性,以上是工程框架建议的文件开发结构,每个项目团队可以根据团队情况,自行规划统一的详细的目录结构。
目录规则
src
源码目录(必须)src/views
逻辑代码存放目录(必须)src/views/页面名称
存放以页面为单位的前端资源src/views/页面名称/index.html
页面html(必须以index命名)src/views/页面名称/index.js
页面脚本(必须以index命名)
# HTML模板
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="renderer" content="webkit">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="apple-mobile-web-app-capable" content="no" />
<meta name="format-detection" content="telephone=no">
<title>页面标题</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<meta name="author" content="" />
<!-- inject:vendor:css -->
<!-- endinject -->
<!-- inject:common:css -->
<!-- endinject -->
<!-- inject:page:css -->
<!-- endinject -->
</head>
<body>
<!-- html代码-start -->
<!-- html代码-end/ -->
<!-- inject:vendor:js -->
<!-- endinject -->
<!-- inject:common:js -->
<!-- endinject -->
<!-- inject:page:js -->
<!-- endinject -->
</body>
</html>
HTML模板规则
- 样式在顶部,脚本在底部
<!-- inject:vendor:css -->
第三方框架库样式<!-- inject:common:css -->
项目公共样式<!-- inject:page:css -->
本页面样式<!-- inject:vendor:css -->
第三方框架库脚本<!-- inject:common:css -->
项目公共脚本<!-- inject:page:css -->
本页面脚本
在构建过程中,对应资源链接会被自动注入。
# preload
<link rel="preload"> 是一种 resource hint,用来指定页面加载后很快会被用到的资源,所以在页面加载的过程中,我们希望在浏览器开始主体渲染之前尽早 preload。如果在html模板中,加入对应的注释标签,cyb-cli 会为初始化渲染需要的文件自动生成 preload 代码。
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="renderer" content="webkit">
<!-- inject:preload:js -->
<!-- endinject -->
<!-- inject:preload:css -->
<!-- endinject -->
<!-- inject:preload:eot -->
<!-- endinject -->
<!-- inject:preload:ttf -->
<!-- endinject -->
<!-- inject:preload:woff -->
<!-- endinject -->
<!-- inject:preload:woff2 -->
<!-- endinject -->
</head>
<body>
</body>
</html>
以上代码会被cyb-cli编译成:
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="renderer" content="webkit">
<link rel="preload" href="**/*.*.js" as="script" crossorigin="anonymous">
<link rel="preload" href="**/*.*.css" as="style" crossorigin="anonymous">
<link rel="preload" href="**/*.*.eot" as="font" crossorigin="anonymous">
<link rel="preload" href="**/*.*.ttf" as="font" crossorigin="anonymous">
<link rel="preload" href="**/*.*.woff" as="font" crossorigin="anonymous">
<link rel="preload" href="**/*.*.woff2" as="font" crossorigin="anonymous">
</head>
<body>
</body>
</html>
# 多页和单页应用
src/views/页面名称
存放以页面为单位的前端资源src/views/页面名称/index.html
页面html(必须以index命名)src/views/页面名称/index.js
页面脚本(必须以index命名)
project
└── src
└── views
├── 页面名称1 # 页面目录名 最终编译为 dist/{页面名称1}.html
├── 页面名称2 # 页面目录名 最终编译为 dist/{页面名称2}.html
└── public # 公共文件目录(可选)
└── folder # 可以自定义创建目录(可选)
# custum 文件夹
任何放置在 custum
文件夹的静态资源都会被简单的复制,而不经过任何编译。你需要通过绝对路径来引用它们。
适合的文件类型
- 音频文件(mp3/WAV/Mid等)
- 视频文件(Mp4/MOV/AVI等)
- 图像文件(jpg/jpeg/png/svg等)
- Flash(swf)文件
- 文档格式的文件(Doc/PPT/PDF等)
- 无需编译的样式或脚本文件
部署目录
project
└── src
└── custom
├── 文件...
├── 文件...
└── folder # 可以自定义创建目录(可选)
├── 文件...
└── 文件...
发布项目时会自动将custom目录中所有文件不做任何编译,不添加版本号,并发布到dist目录。
dist/custom/*