$ cnpm install @uyun/everest-redevelop
1. 提供业务组件/功能
2. 做二次开发
进入src目录,创建 redevelop.index.js,该文件用于导出模块接口供外部使用,格式可参考以下代码:
export { default as Hostmap } from './app/host-map'
进入项目根目录,构建二次开发包
everest redevelop -c
命令。其中-c
的作用是将everest的最新构建工具打包到二次开发包中。如果只是提供或更新二次开发包,执行everest redevelop
命令即可。执行上述命令后,将在项目目录下创建 redevelop-项目名称 的文件夹,以redevelop-monitor为例。进入redevelop-monitor目录后,可测试二次开发的包的导出和引入功能,测试命令执行流程参考如下:
cd redevelop-monitor
进入开发包所在目录npm i
安装依赖everest redevelop --install ../redevelop-monitor
将../redevelop-monitor路径下的开发包打包进根目录下node_modules/@uyun文件夹中并安装开发包所需依赖。everest start
测试能否正常运行如果使用方没有everest-cli 构建工具
将redevelop-monitor作为二次开发项目目录。备份原始数据,方便以后升级。
安装构建工具 everest-cli
cd redevelop-monitor/everest-tools
npm i
安装包依赖npm run everest-link
把构建工具链接到全局everest -v
查看是否安装成功进行二次开发
cd redevelop-monitor
npm i
安装包依赖everest redevelop -i ../redevelop-monitor
(../redevelop-monitor是开发包的所在路径)
everest start
如果有 everest-cli,构建工具(必须是最新的),但没有项目目录
要升级monitor的二次开发包, 或添加二次开发包,比如升级的包放在D盘下(路径为:d:/redevelop-monitor-new)
everest redevelop -i ../redevelop-monitor-new
将覆盖原来的包 (../redevelop-monitor-new是最新的开发包或引入的其他开发包的存放路径)everest init my-project
。 选择uyun-web-template 优云web端模板
, 作为提供者项目src
下创建 redevelop.index.js
作为提供组件的入口文件, 代码如下:export { Index, Layout, User, Todo, DetailUser } from './routes/index'
everest redevelop
打包提供包$ cd redevelop-my-project
$ npm i
$ everest redevelop -i ../redevelop-my-project
$ everest start
以上步骤解释参照上面场景一
import React, {Component, PureComponent } from 'react'
import { HashRouter, Redirect, Route, Switch } from 'react-router-dom'
import * as devs from '@uyun/redevelop-my-project'
import '@uyun/redevelop-my-project/dist/my-project.css'
//新添加的组件
class NewAdd extends React.PureComponent {
render() {
return <h1>我是新添加的</h1>
}
}
export default class Bootstrap extends React.PureComponent {
render () {
return (
<div>
<HashRouter>
<Switch>
<Redirect exact from='/' to='/index' />
{
Object.values(devs).map((Cpt, i) => (
Component.isPrototypeOf(Cpt) || PureComponent.isPrototypeOf(Cpt)
) && <Route key={Cpt.name} exact path={`/${i === 0 ? 'index' : Cpt.name}`} component={Cpt} />
)
}
/**
* 新添加的
*/
<Route exact path='/new-add' component={NewAdd} />
</Switch>
</HashRouter>
</div>
)
}
}
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>uyun demo</title>
<link rel="icon" href="/tenant/styles/images/title-logo.png" >
<link rel="stylesheet" type="text/css" href="/frontend/Layout-public.min.css">
<link rel="stylesheet" type="text/css" href="/static/fonts/project/iconfont.css">
</head>
<body>
<div id="layout-content" class="local-content"></div>
<script src="/static/js/jquery.min.js"></script>
<script src="/frontend/Layout-public.min.js"></script>
<script>
Layout.init(1014);
Layout.I18n({
zh_CN: './static/locales/zh_CN.json',
en_US: './static/locales/en_US.json'
});
Layout.createNavigation({
"items": [
{
"title": $.translate('INDEX'),
"route": "/index",
"icon": "iconfont icon-zonglan"
},
{
"title": $.translate('USER'),
"route": "/user",
"icon": "iconfont icon-yonghu"
},
{
"title": $.translate('TODO'),
"route": "/todo",
"icon": "iconfont icon-liebiaolan"
},
{
"title": "新添加的",
"route": "/new-add",
"icon": "iconfont icon-liebiaolan"
}
]
});
</script>
</body>
</html>
使用者可以通过配置的形式去修改页面(不需要二次打包)
unpm install --save @uyun/everest-redevelop
import { Redevelop } from '@uyun/everest-redevelop'
/**
* 修饰器 @Redevelop 意义
* 是将组件的 props 中所有的属性提供给使用者
*/
@Redevelop()
export default class Demo extends PureComponent {
static defaultProps = {
title: [1, 2, 3, 5]
}
render () {
return (
<div style={{ position: 'absolute' }}>
{ this.props.title.map( t => <li key={t}>{t}</li>) }
<Demo2 />
</div>
)
}
}
项目中public文件下创建 redevelop/index.js
作为使用者配置。
public/redevelop/index.js
去测试everest build
打包后将redevelop/index.js
拷贝build中,使用者在build/redevelop/index.js
去配置页面,//redevelopDebug 0 关闭debug模式 | 1 开示debug模式
var redevelopDebug = 1
// redevelopConfig主要用来配置一些静态数据
var redevelopConfig = {
// Demo 是组件名称
Demo: {
tilte: [2, 3]
// 对应 Demo 组件Props配置
}
}
/**
* getRenderBeforeProps 组件在渲染之前! 会执行, 主要用来做静态配置
* @{dev}
* dev.setProps 设置组件props,
* 参数一: Array<组件名称, 组件的key默认 '-', 可以不填>
* 参数二: 方法(p: immutable): any { },必须有返回值
*
*/
function getRenderBeforeProps (dev) {
for (var nameKey in redevelopConfig) {
dev.setProps(nameKey.split('-'), function (props) {
return redevelopConfig[nameKey]
})
}
}
/**
* getRenderAfterProps 组件在渲染之后, 会执行
* 如果设计的异步添加配置 或者 渲染之后修改配置或追加配置
* dev.updateProps 是来更新 组件 props
*
function getRenderAfterProps (dev) {
setTimeout(t => {
dev.updateProps(['Home'], function (props) {
// props 是一个 immutable, 你可以用来合并, 更新, 修改, 添加 等操作
return props.merge({
title: [1111,21212]
})
})
}, 1000)
}
*/
Copyright 2013 - present © cnpmjs.org