0.0.11 • Published 10 years ago

generator-athena v0.0.11

Weekly downloads
6
License
MIT
Repository
github
Last release
10 years ago

generator-athena

npm version Code Climate

JDC构建项目生成工具,生成相应目录和代码,同时提供Gulp配置对项目进行编译

安装

基于node,请确保已具备较新的node环境

需要全局安装yeoman

[sudo] npm install -g yo

然后安装本脚手架

[sodu] npm install -g generator-athena

项目结构

一个项目对应一个目录,项目中可以包含多个模块,项目将由以下结构组成

├── module1                 - 模块1
├── module2                 - 模块2
├── module3                 - 模块3
├── gulpfile.js             - gulp文件
├── app-conf.js             - 项目的配置信息
└── package.json

项目中模块将由以下结构组成

├── dist                    - 通过编译生成的目录
│   ├── combofile           - publish时用来存放生成页面和页面片文件的目录
│   ├── css                 - 通过编译生成的css文件
│   ├── js                  - 通过编译生成的js文件
│   ├── image               - 通过编译压缩后的image文件
│   ├── page1.html          - 通过编译生成的页面html
│   ├── map.json            - 通过gulp编译后生成页面依赖widget列表
|
├── page                    - 所有页面目录
│   ├── page                - 某一页面目录
│       ├── page.css        - 页面级css
│       ├── page.js         - 页面级js
│       ├── page.html       - 页面html
│
├── static
│   ├── css                 - 额外的css文件
│   ├── js                  - 额外的js文件
│   ├── image               - 额外的image文件
│  
├── widget                  - 所有widget目录
│   ├── widget              - 某一widget目录
│       ├── image           - widget的图片目录
│       ├── widget.css      - widget的css
│       ├── widget.js       - widget的js
│       ├── widget.html     - widget的html
│
├── static-conf.js          - 需要额外引用的静态资源的配置
│
└── module-conf.js          - 模块的配置信息

在这种项目组织方式中,将页面拆分成各个widget组件,在页面中通过加载各个widget的方式来拼装页面,再经过gulp编译,生成正常页面。

快速开始

生成新项目

生成一个新的项目目录

yo athena

然后根据提示一步一步来,将会自动生成项目的结构和所需文件代码,再也不用复制代码了哟~

新增模块

在某一项目中新增一个模块,比如在项目wd中新增一个open模块,需要在项目根目录下执行

yo athena:module [模块名]

然后根据提示一步一步来,将会自动生成项目的结构和所需文件代码,再也不用复制代码了哟~

新增页面

在某一模块下新增一个页面,进入到该模块下,执行

yo athena:page [pageName]

然后根据提示一步一步来,再也不用复制代码了哟~

新增widget

在某一模块下新增一个widget组件,进入到该模块下,执行

yo athena:widget [widgetName]

然后根据提示一步一步来,再也不用复制代码了哟~

使用及编译

模块化

通过阅读设计稿,我们可以将页面拆分成不同widget,而一些可以通用的widget我们可以放到一个公共模块中去统一管理,通过这样的页面组件化方式,我们可以很好地避开复制代码的问题,同时让我们的代码更好管理。

在执行yo athena:page [pageName]命令生成页面后,可以发现在模块的page目录下多了一个以刚刚输入的页面名称pageName作为名字的目录,这个目录下面包含 html/js/css 三个文件。在html文件中一般通过加载各个widget的方式来进行开发,具体代码如下:

<%= widget.load('user') %>
<%=
	widget.load('user', {
		param: 'test'
	})
%>
<%= widget.load('user', null, 'gb') %>

widget.load可以方法接收三个参数,第一个参数是widget的名称,后面两个参数是可选参数,第二个是向widget传递的一些参数,第三个是widget所属的模块,如果是本模块,可以不传。

页面中API

widget.load

如前一小节所显示,用来加载组件

getCSS

使用方式 <%= getCSS() %>

用来输出页面所需引用的CSS Link,可传入2个参数,第一个参数是CSS 样式表的名称,第二个参数是模块名。如果什么都不传则默认输出与当前页面同名的样式表。例如:

当前模块hello中有一页面为mine.html,在页面<head>标签中调用<%= getCSS() %>将输出

<link rel="stylesheet" type="text/css" href="css/mine.css" combo-use="/hello/css/mine.min.css">

getJS

与上述getCSS相似,将输出页面所需引用的脚本文件,参数与getCSS保持一致。

当前模块hello中有一页面为mine.html,在页面<body>标签最后调用<%= getJS() %>将输出

<script src="js/hello.js"></script>

注意

  • 这些API调用语句末尾不要加分号

app-conf.js

项目的根目录下生成的文件中,app-conf.js文件是一个通过传入配置项生成的关于本项目的配置文件,我们可以看到它包含如下配置:

'use strict';

module.exports = {
  app: 'qwd', // 项目名称
  common: 'gb', // 公共模块
  moduleList: ['gb', 'frs', 'test'], // 项目下模块列表,通过yo athena:module命令生成模块时会自动往此处添加新模块名
  deploy: {  // 需要发布时的配置
    qiang: {
      host: 'labs.qiang.it', // 机器host
      user: '', // 用户名
      pass: '', // 密码
      port: 21, // 端口
      remotePath: '/labs.qiang.it/h5/qwd/frs' // 上传到的目录
    },
    jdTest: {
      host: '192.168.193.32',
      user: '',
      pass: '',
      port: 22,
      fdPath: '/fd/h5',
      domain: 's.paipaiimg.com',
      remotePath: '/export/paipai/resource/static/fd/h5/hellokity',
      cssi: '/export/paipai/resource/sinclude/cssi/fd/h5/hellokity', // 上传页面片的目录
      assestPrefix: '/static/fd/h5/hellokity', // 发布完静态资源后,静态资源路径
      shtmlPrefix: '/sinclude/cssi/fd/h5/hellokity' // 发布完页面片后,静态资源路径
    },
    tencent: {
      host: '172.25.34.21',
      user: '',
      pass: '',
      port: 21,
      fdPath: '/fd/h5',
      domain: 'static.paipaiimg.com',
      remotePath: '/newforward/static/fd/h5/hellokity',
      cssi: '/newforward/static/sinclude/cssi/fd/h5/hellokity',
      assestPrefix: '/static/fd/h5/hellokity',
      shtmlPrefix: '/static/sinclude/cssi/fd/h5/hellokity'
    }
  }
};

其中 appcommon 配置项 不要 修改,我们需要重点关注 deploy 这个配置项,这是发布到一些机器上的配置,可以注意到用户名和密码是空的,我们需要自己去完善它,同时上传的目录可以根据自己的需要进行修改。

module-conf.js

包含模块的一些配置信息

'use strict';

module.exports = {
  creator: 'luckyadam',  // 模块创建者
  app: 'hw',  // 项目名称
  common: 'gb',  // 公共模块名称
  module: 'mm',  // 当前模块名
  description: 'test',  // 模块简要信息
  support : {  
    px2rem: {  // px转rem配置
      enable: false,  // 是否开启
      root_value: 40,
      unit_precision: 5,
      prop_white_list: [],
      selector_black_list: [],
      replace: true,
      media_query: false
    },
  }
};

static-conf.js

需要引用static目录下资源的配置,由使用者自定义,一般可以用来自定义配置一些需要额外引用的第三方库文件,例如:

static/css目录下存在t1.csst2.css两个资源,需要将这两个资源引用到页面中,那么可以在该文件中增加如下配置

'use strict';

module.exports = {
  staticPath: {
    'test.css': [
      'static/css/t1.css',
      'static/css/t2.css'
    ]
  }
};

test.css 是自定义的合并后css名称,若要在页面中引用,只需调用 <%= getCSS('test.css') %> 即可。引用js文件同理

需要注意的是:

  • test.css 需带上后缀以示区分
  • 引用的资源路径,从static目录开始写全,如 static/css/t1.css

map.json

map.json 文件是通过执行gulp任务后生成一个标识依赖关系的文件,文件中包含了当前模块所有页面所依赖的widget组件的信息,同时还有页面引用静态资源的信息,它的文件结构如下

{
  "dependency": {
  	"find.html": [],
 	"index.html": [],
 	"open.html": [],
 	"open1.html": [],
  	"open3.html": [],
  	"shop.html": [
   	 {
      	"widgetName": "topbar",
      	"param": {
        	"topbar": "微信"
      	},
      	"module": "test",
      	"exists": true
     }
   ],

   "include": {
    "test.html": {
      "css": [
        {
          "name": "gb.css",
          "module": "gb"
        },
        {
          "name": "test.css",
          "module": "mm"
        },
        {
          "name": "t.css",
          "module": "mm"
        }
      ],
      "js": [
        {
          "name": "test.js",
          "module": "mm"
        }
      ]
    }
  }
}

gulp

在编写完页面后可以通过gulp命令来执行对整个项目的编译,编译后的结果生成在各个模块的dist目录下。

同时你可以通过传入参数来决定你需要编译的模块,模块名参数指定模块,可以包含多个模块,多模块间使用 , 进行分隔

gulp --module [模块名]

gulp serve

通过gulp serve命令可以实时预览正在编辑的页面。你可以在根目录执行这个命令,也可以进入到具体模块目录下去执行这个命令

如果在项目根目录下,可以通过携带参数来决定要浏览的页面:

gulp serve --module [模块名] --page [页面名]

如果在模块目录下,可以通过携带参数来决定要浏览的页面:

gulp serve --page [页面名]

gulp deploy

项目根目录下 通过 gulp deploy 会将整个项目重新编译,并且将编译好的文件部署到预览机器 labs.qiang.it 上去。我们需要更改 app-conf.js 的配置填写机器的用户名和密码。

通过传入参数来观察文件传输情况:

gulp deploy --verbose

可以选择只发布一个模块的内容

如果觉得一次性部署整个项目太慢,可以选择进入到你想要部署的 模块 下来执行 gulp deploy

gulp publish

gulp publish 会将模块重新编译后发布到开发机上,同时会将压缩并重命名后的css文件和动态生成的页面片文件发布到机器的对应目录下。而在每次执行 gulp publish 后页面片中的时间戳将会自动更新。目前支持发布到腾讯和京东域的开发机,机器代号分别是 tencent jsTest。在 gulp publish 的过程中,你可以自行选择需要发布到开发机上的页面和对应静态资源。

在模块目录下执行这个命令将会只发布本模块的页面。

在项目根目录下执行,可以通过传参来决定将发布哪些模块。模块名参数指定模块,可以包含多个模块,多模块间使用 , 进行分隔

gulp publish --module [模块名]

gulp clone

进入到某一模块下,通过gulp clone 命令可以复制另一个模块的widget到当前模块。

gulp clone --from [来源模块] --widget [widget名字]
0.0.11

10 years ago

0.0.10

10 years ago

0.0.9

10 years ago

0.0.8

10 years ago

0.0.7

10 years ago

0.0.6

10 years ago

0.0.5

10 years ago

0.0.4

10 years ago

0.0.3

10 years ago

0.0.2

10 years ago

0.0.1

10 years ago