vip-server-renderer
Version:
Atom server renderer(PHP)
122 lines (91 loc) • 3.59 kB
Markdown
# vip-server-renderer
支持`Atom`的服务端渲染
## 安装
``` bash
npm install vip-server-renderer
```
## 项目文件说明
- `index.js`: 编译工具,输入`.atom.html`文件内容,输出编译后的js/php/css等信息
- `php/*`: php运行时库
- `js/atom.js`: js运行时库(目前版本完全基于Vue 2.3.3)
## API
首先,需要引入`vip-server-renderer`
``` js
const compiler = require('vip-server-renderer');
```
### compiler.compile(options)
输入一个`.atom.html`文件的内容, 返回一个包含编译后各个信息的对象,对象形式如下:
``` js
{
blocks: Object, // 各个block中的源代码
compiled: {
js: String, // 编译后的js代码
css: String, // 编译后的css代码
php: String // 编译后的php代码
},
paths: {
js: Object, // 编译后js中引用的各个组件的路径
php: Object // 编译后php中引用的各个组件的路径
},
props: Array // 当前vue组件定义props
}
```
#### options
- options.content: `.vue`文件的内容,必选
- options.mode: 编译后的js代码的形式,可选,取值包括`amd/commonjs/umd/global`,默认值`amd`
- options.compileJSComponent: 处理js组件路径的插件函数,可选,插件函数可以获取到两个参数,分别是组件的原始路径`path`和组件的`key`。插件函数应返回相应的js代码(如`require("path/to/component")`)。
- options.compilePHPComponent: 处理php组件路径的插件函数,可选,插件函数可以获取到两个参数,分别是组件的原始路径`path`和组件的`key`。插件函数返回相应的php代码(如`"path/to/component"`)。
- options.compileStyle: 暴露预处理 css 代码的接口,可选。插件函数可以获取到两个参数,分别是代码内容 `code` 和所在的 style 标签的参数 `attrs`(目前只有 `attrs.lang`,表示用户设置的预处理语言),该函数只支持同步的方式,返回处理后的 css 代码。
- options.strip {boolean} 是否strip掉空白字符(类似smarty的{strip}{/strip}),默认为false
- options.versionIsolated {boolean} 是否使用php的版本隔离,默认是 true
- options.silent {boolean} 是否静默 false
- options.color {boolean} 日志是否带颜色 true
- options.logger {Function|Object} 日志回调函数
### compiler.getRender(template)
输入一个`template`字符串,返回一个用`module.exports`包裹,包含`render`函数和`staticRenderFns`的字符串
#### template
vue模板字符串
## Vue服务端渲染原理

## 使用限制
由于不同语言的限制,我们在使用`vue-php`进行服务端渲染时也有一些限制:
- `.vue`文件中,组件的`data`、`props`和`components`属性必须单独放到`<config>`中
- `template`中模板使用js表达式时,不能调用函数,不能使用计算属性
一个`.vue`文件示例
```
<template>
<div class="c-container">
<div>{{a}}</div>
<div><p>123</p></div>
<div v-if="b">i am b</div>
<ala />
</div>
</template>
<style>
.c-container {
color: red;
}
</style>
<script>
var sth = require('something');
module.exports = {
created: function () {
sth();
}
};
</script>
<config>
{
props: ['x', 'y'],
data: {
a: 123,
b: true
},
components: {
ala: 'path/to/ala'
}
};
</config>
```
## License
[MIT](https://opensource.org/licenses/MIT)