UNPKG

fisp-command-init

Version:
384 lines (318 loc) 9.83 kB
## 脚手架使用文档 ### 介绍 如果你使用的是FIS,如果你感觉有一些东西可以做成规范实行起来,如果你有一些公用的模板或者组件的框架,那么就使用脚手架吧。方便快捷简单的搞定上面提到的这些问题。 ### 使用方法 目录: * [基本用法](#基本用法) * [新建一个模块](#新建一个模块) * [新建一个widget](#新建一个widget) * [安装模块中使用到的fis插件](#安装模块中使用到的fis插件) * [下载其他组件](#下载其他组件) * [高级用法](#高级用法) * [模板](#模板) * [插件](#插件) * [详细步骤](#详细步骤) * [制作模板](#制作模板) * [#mdoule模板](#制作模板) * [#widget模板](#制作模板) * [#全局变量](#制作模板) * [发布模板](#发布模板) * [制作插件](#制作插件) * [发布插件](#发布插件) #### 基本用法 ```bash Usage: init <command> [options] Commands: module create a module widget create a widget Options: -h, --help output usage information -s, --scaffold <scaffold> -d, --dir <name> create to dir --with-plugin if create a module, whether include `plugin` --repos <url> repository --verbose output verbose help --list [query] list component from the repos ``` 如上,脚手架支持创建一个模块(module)和widget(widget),其使用方法是; ##### 新建一个模块 ``` $ fis init module -d common --with-plugin // common只是一个文件夹,可以是任何目录, --with-plugin意思是是否包含fis提供的smarty插件(fis-plus) or $ fis init module -d no-common // no-common只是一个文件夹,可以是任何目录 ``` ##### 新建一个widget ``` $ fis init widget -d header ``` ##### 安装模块中使用到的fis插件 如果你的项目用了未在FIS中默认依赖的插件,比如sass,比如某某某; 当一个新人拿到这样一个模块时,需要安装这些插件,但如果没有文档说明这些,TA最多看到release时的一个报错,然后不知所措; 脚手架支持这样一个功能,自动安装这些插件。 在模块目录下执行; ```bash $ fis init ``` ##### 下载其他组件 eg, 下载modjs ```bash $ fis init modjs ``` 如果想看看还能下载那些包; ```bash $ fis init --list ``` #### 高级用法 这节主要说一下脚手架的定制,脚手架默认附带一份模板和插件,后面会具体说明`模板`和`插件`。 ##### 模板 模板就是已经被创建好的module和widget;里面体现了公用的编码规范,和一些可替换的全局变量;这块很重要,是整个脚手架的核心。 这个模板里面可以说明: + js组件如何导出函数 + js组件如何使用,使用规范是什么 + 注释如何写 + css组件如何写 + fis-conf.js公用的配置 + 其他 有了模板,还需要有一些不一样的地方,就比如注释里面的作者、时间;还有fis-conf.js里面的namespace等。这种修改怎么办,脚手架提供一种方法。 当制作模板的时候使用`{{- namespace -}}`这种方式后,再进行创建的时候需要使用者输入`namespace`的值。 ##### 插件 插件是用来进行一些目录调整的、文件名替换、下载模板等; ##### 详细步骤 + 制作模板 + module模板 + widget模板 + 全局变量 + 发布模板 + 制作插件 + 发布插件 ###### 制作模板 ###### #module模板 假设module中包含 + fis-conf.js // fis配置文件 + page/layout.tpl // layout.tpl + page/index.tpl // 页面模板 + plugin/* // 插件 + test/page/index.php // index页面测试数据 * widget/header.tpl // widget tpl模板 * widget/header.css // widget css文件 * widget/header.js // widget js文件 那就创建这些文件,并完善; ```bash $ tree iknow-scaffold-module iknow-scaffold-module ├── fis-conf.js ├── page    ├── index.tpl    └── layout.tpl ├── plugin └── widget └── header ├── header.css ├── header.js └── header.tpl ``` ###### widget模板 widget模板中包含 + widget.tpl + widget.js + widget.css ###### #全局变量 比如 fis-conf.js ```javascript fis.config.set('namespace', {{-namespace ?-}}); ``` 以上说明了以下模板的制作过程,更详细请安装已经设定好的模板作为参考 ```bash $ lights install pc-scaffold-module ``` ###### 发布模板 FIS提供了包组件管理平台lights,你可以方便的把包发布到lights上; ```bash $ cd iknow-scaffold-module $ lights init //要求安装lights ... $ lights publish ``` done. 脚手架内核提供了从lights下载包的方法; ```javascript /** * options.exclude [RegExp]需要排除的文件 * options.include [RegExp]需要的文件 * dist 目标目录 */ fis.scaffold.downlaod('组件名', dist, options, callback); ``` 下载完成以后,需要呼出交互界面替换全局变量的接口; ```javascript /** * dir 下载组件存放的文件夹 */ fis.scaffold.prompt(dir); ``` 还提供了一个mv接口,用来做文件或文件夹移动的; ```javascript fis.scaffold.mv(from, to, include, exclude); ``` 其他接口; 还可以使用`fis.util`里面的所有方法; ```javascript $ node > fis = require('fis'); > fis.util { [Function] is: [Function], map: [Function], pad: [Function], merge: [Function], clone: [Function], escapeReg: [Function], escapeShellCmd: [Function], escapeShellArg: [Function], stringQuote: [Function], getMimeType: [Function], exists: [Function], fs: { Stats: [Function], exists: [Function], existsSync: [Function], readFile: [Function], readFileSync: [Function], close: [Function], closeSync: [Function], open: [Function], openSync: [Function], read: [Function], readSync: [Function], write: [Function], writeSync: [Function], rename: [Function], renameSync: [Function], truncate: [Function], truncateSync: [Function], ftruncate: [Function], ftruncateSync: [Function], rmdir: [Function], rmdirSync: [Function], fdatasync: [Function], fdatasyncSync: [Function], fsync: [Function], fsyncSync: [Function], mkdir: [Function], mkdirSync: [Function], readdir: [Function], readdirSync: [Function], fstat: [Function], lstat: [Function], stat: [Function], fstatSync: [Function], lstatSync: [Function], statSync: [Function], readlink: [Function], readlinkSync: [Function], symlink: [Function], symlinkSync: [Function], link: [Function], linkSync: [Function], unlink: [Function], unlinkSync: [Function], fchmod: [Function], fchmodSync: [Function], lchmod: [Function], lchmodSync: [Function], chmod: [Function], chmodSync: [Function], lchown: [Function], lchownSync: [Function], fchown: [Function], fchownSync: [Function], chown: [Function], chownSync: [Function], _toUnixTimestamp: [Function: toUnixTimestamp], utimes: [Function], utimesSync: [Function], futimes: [Function], futimesSync: [Function], writeFile: [Function], writeFileSync: [Function], appendFile: [Function], appendFileSync: [Function], watch: [Function], watchFile: [Function], unwatchFile: [Function], realpathSync: [Function: realpathSync], realpath: [Function: realpath], createReadStream: [Function], ReadStream: { [Function: ReadStream] super_: [Object] }, FileReadStream: { [Function: ReadStream] super_: [Object] }, createWriteStream: [Function], WriteStream: { [Function: WriteStream] super_: [Object] }, FileWriteStream: { [Function: WriteStream] super_: [Object] }, SyncWriteStream: { [Function: SyncWriteStream] super_: [Object] } }, realpath: [Function], realpathSafe: [Function], isAbsolute: [Function], isFile: [Function], isDir: [Function], mtime: [Function], touch: [Function], isWin: [Function], isTextFile: [Function], isImageFile: [Function], md5: [Function], base64: [Function], mkdir: [Function], toEncoding: [Function], isUtf8: [Function], readBuffer: [Function], read: [Function], write: [Function], filter: [Function], find: [Function], del: [Function], copy: [Function], ext: [Function], query: [Function], pathinfo: [Function], camelcase: [Function], pipe: [Function], parseUrl: [Function], download: [Function], upload: [Function], install: [Function], readJSON: [Function], glob: [Function], nohup: [Function], normalize: [Circular] } ``` ###### 制作插件 插件需要放到npm上,插件命名规范`fis-scaffold-<插件名>`。具体可参考[fis-scaffold-pc](https://github.com/xiangshouding/fis-scaffold-pc) 插件接口: ```javascript /** * options * options.dir 安装到dir目录下 * options.withPlugin 是否带插件 */ module.exports = function (options) { ... //必须导出widget和module两个接口 return { widget: function () {....} module: function () {....} }; } ``` 插件完成后发布npm; 那么这个插件如何使用呢;假设自定义了一个插件`fis-scaffold-iknow`. 那么使用的时候 ```bash # 使用-s选择某个脚手架 $ fis init module -s iknow -d common $ fis init widget -s iknow -d footer ``` ###### 发布插件 ```bash $ npm publish ```