目录规范
BUI-Weex 提供的脚手架工程是在官方的基础上进行改造的,主要包括以下几个方面特性: * 动态生成 webpack 入口 * 支持 Sass 加载器 * 支持加载工程目录下图片资源 * 支持加载 ttf 字体图标文件
先来看看目录结构,然后再逐个分析实现的机制!
目录结构
- bui-weex-template
- assets —— weex官方内置
- build —— weex官方内置,自定义脚本,在 npm run serve时候使用
- dist —— webpack打包生成的目录,包含js,image,ttf等
- node_modules —— 工程依赖的npm package
- src —— 业务代码
- entry —— 放置webpack的入口,多个入口就放在这里
- app.js —— 入口文件
- image —— 放置图片资源
- logo.png —— 内置logo图片
- js —— 放置js公共代码目录
- views —— 放置视图页面
- app.vue —— 对应app.js的视图页面
- .babelrc —— 支持ES6语法的配置文件,删除后无法使用ES6
- config.js —— 启动Server的时候自动生成的文件(npm run serve)
- index.html —— PC预览首页
- package.json —— npm的配置文件,里面包含依赖配置、Scripts配置等
- webpack.config.js —— webpack的脚本文件
- weex.html —— PC预览页面,index.html 嵌入的 iframe页面
特性:动态生成 webpack 入口
标准的webpack配置entry是需要指定文件的,为了方便使用,框架将自动遍历 src/entry目录并生成对应的 js bundle
关键代码 (webpack.config.js):
1. // 遍历文件入口,动态生成入口
2. function getEntries () {
3. var entryFiles = glob.sync('./src/entry/**', { 'nodir': true})
4. var entries = {};
5. for (var i = 0; i < entryFiles.length; i++) {
6. var filePath = entryFiles[i];
7. var filename = filePath.split('entry/')[1];
8. filename = filename.substr(0, filename.lastIndexOf('.'));
9. entries[filename] = filePath;
10. }
11. return entries;
12. }
特性:支持 Sass 加载器
框架内使用 Sass的语法来写样式,对应的样式文件是 *.scss,框架做了支持: 在 package.json 中配置如下依赖: 1. "node-sass": "^4.5.2", 2. "sass-loader": "^6.0.3",
在 web.config.js 中配置如下loader: 1. loaders: [ 2. { 3. test: /.scss$/, 4. loader: 'style!css!sass' 5. } 6. ]
特性:支持加载工程目录下图片资源
官方的<image>组件不支持加载本地工程的图片,只加载远程的 http 图片。框架做了处理,将 src/image 目录下的图片资源在编译阶段拷贝到 dist 目录下,开发人员就可以通过 <bui-image> 来使用本地的图片。
在 web.config.js 中
1. // 文件拷贝插件,将图片拷贝到dist目录
2. var copyPlugin = new copy([
3. {from: './src/image', to: "./image"}
4. ])
使用方式:
1.
特性:支持加载 ttf 字体图标文件
框架提供了<bui-icon>组件,里面用到 ionicons 的字体文件 ttf,框架在编译阶段将其拷贝到 dist 目录。组件内部会从 dist 目录下找到 这个ttf文件。
1. // 文件拷贝插件,将字体拷贝到dist目录
2. var copyPlugin = new copy([
3. {from: './node_modules/bui-weex/src/font', to: "./font"}
4. ])
