Compare commits
4 Commits
es-next-we
...
es5-gulp
Author | SHA1 | Date |
---|---|---|
dailer | a6242ddc99 | 3 years ago |
dailer | b04a1583dc | 3 years ago |
dailer | 32a550fdba | 3 years ago |
dailer | 686971aea7 | 3 years ago |
8 changed files with 183 additions and 2 deletions
@ -1,2 +1,73 @@
|
||||
# javascript-dev-demo |
||||
|
||||
## 使用说明 |
||||
在插件开发过程中,比较常见的场景是通过`WebResourceProvider`注入一段自定义的javascript文件,如果插件功能较多,在编写插件代码时候大多会拆分为多个js文件编写,在发布插件时合并为一个文件供`WebResourceProvider`引入 |
||||
|
||||
此仓库提供了es6,es6,typescript三个分支 |
||||
|
||||
## 项目结构 |
||||
常见的项目结构如下图所示,resources下放置js文件 |
||||
|
||||
![1](./screenshots/1.png) |
||||
|
||||
建议打包合并的js文件输出到dist目录下,这样对应`WebResourceProvider`中代码为 |
||||
``` |
||||
public class WebResourceProvider extends AbstractWebResourceProvider { |
||||
@Override |
||||
public Atom attach() { |
||||
return MainComponent.KEY; |
||||
} |
||||
|
||||
@Override |
||||
public Atom client() { |
||||
return new Component() { |
||||
@Override |
||||
public ScriptPath script(RequestClient requestClient) { |
||||
return ScriptPath.build("/com/fr/plugin/decision/demo/web/dist/dec.plugin.demo.js"); |
||||
} |
||||
}; |
||||
} |
||||
} |
||||
``` |
||||
|
||||
如果使用了git,将`node_modules`加入到插件项目的`.gitignore`中,注意不是这个demo的 |
||||
|
||||
## es5-gulp |
||||
|
||||
#### 复制模板 |
||||
|
||||
1. 可以直接复制package.json,gulpfile.js到web路径下 |
||||
2. 也可以直接clone项目到web路径下 |
||||
|
||||
#### 安装nodejs,选装yarn |
||||
|
||||
这一步省略,可以自行查阅相关资料 |
||||
|
||||
#### 安装依赖 |
||||
|
||||
在web路径下启动命令行,执行 |
||||
|
||||
`npm install` 或者 `yarn install` |
||||
|
||||
#### 打包合并文件 |
||||
|
||||
示例中编写了两个js文件,将这两个文件合并为`dec.plugin.demo.js`输出到dist目录下 |
||||
|
||||
命令行执行 |
||||
|
||||
`npm run build` 或 `yarn build` |
||||
|
||||
这是dist目录下将出现`dec.plugin.demo.js`文件,如果需要再次打包,重新执行上述命令即可 |
||||
|
||||
![2](./screenshots/2.png) |
||||
|
||||
#### 自动watch文件变动 |
||||
|
||||
如果需要在源代码变动之后自动合并输出文件,可以采用dev开发模式 |
||||
|
||||
命令行执行 |
||||
|
||||
`npm run dev` 或 `yarn dev` |
||||
|
||||
即启动了一个node进程,每当源代码中任意js文件变更,`dec.plugin.demo.js`都会被自动更新 |
||||
因为启动了一个web-server,也可以直接访问localhost:9009/dist/dec.plugin.demo.js加载js文件 |
@ -0,0 +1,29 @@
|
||||
const { src, dest, series } = require("gulp"); |
||||
const concat = require("gulp-concat"); |
||||
const watch = require("gulp-watch"); |
||||
const browserSync = require("browser-sync").create(); |
||||
|
||||
function buildTask() { |
||||
return src(["src/**/*.js"]) |
||||
.pipe(concat("dec.plugin.demo.js")) |
||||
.pipe(dest("./dist")); |
||||
} |
||||
|
||||
function watchTask(done) { |
||||
watch(["src/**/*.js"], buildTask); |
||||
done(); |
||||
} |
||||
|
||||
function staticServerTask(done) { |
||||
browserSync.init({ |
||||
port: "9009", |
||||
server: { |
||||
baseDir: "./", |
||||
}, |
||||
open:false |
||||
}); |
||||
done(); |
||||
} |
||||
|
||||
exports.buildTask = buildTask; |
||||
exports.devTask = series(buildTask, watchTask, staticServerTask); |
@ -0,0 +1,20 @@
|
||||
{ |
||||
"name": "javascript-dev-demo", |
||||
"version": "1.0.0", |
||||
"main": "index.js", |
||||
"repository": "https://code.fanruan.com/dailer/javascript-dev-demo.git", |
||||
"author": "dailer <Dailer@fanruan.com>", |
||||
"license": "MIT", |
||||
"scripts": { |
||||
"build": "gulp buildTask", |
||||
"dev": "gulp devTask" |
||||
}, |
||||
"dependencies": { |
||||
"browser-sync": "^2.27.7", |
||||
"gulp": "^4.0.2", |
||||
"gulp-concat": "^2.6.1", |
||||
"gulp-sourcemaps": "^3.0.0", |
||||
"gulp-watch": "^5.0.1", |
||||
"serve-static": "^1.14.2" |
||||
} |
||||
} |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 8.7 KiB |
@ -0,0 +1,44 @@
|
||||
// 建议每个文件都包裹一层立即执行函数,避免插件的全局变量污染
|
||||
!(function () { |
||||
var Widget = BI.inherit(BI.BasicButton, { |
||||
|
||||
props: { |
||||
baseCls: "decision-plugin-demo", |
||||
}, |
||||
|
||||
render: function () { |
||||
var self = this, o = this.options; |
||||
|
||||
return { |
||||
type: "bi.vertical", |
||||
hgap: 10, |
||||
vgap: 10, |
||||
items: [ |
||||
{ |
||||
el: { |
||||
type: "bi.vertical_adapt", |
||||
rgap: 10, |
||||
items: [ |
||||
{ |
||||
type: "bi.label", |
||||
text: "测试开关" |
||||
}, { |
||||
type: "bi.switch", |
||||
ref: function (_ref) { |
||||
self.switchButton = _ref; |
||||
}, |
||||
selected: false, |
||||
handler: function () { |
||||
console.log(self.switchButton.isSelected() ? "开启" : "关闭") |
||||
} |
||||
} |
||||
] |
||||
}, |
||||
}, |
||||
], |
||||
}; |
||||
}, |
||||
}); |
||||
|
||||
BI.shortcut("dec.plugin.demo", Widget); |
||||
}()); |
@ -0,0 +1,18 @@
|
||||
// 建议每个文件都包裹一层立即执行函数,避免插件的全局变量污染
|
||||
!(function () { |
||||
// 示例在系统管理新增一个管理节点
|
||||
BI.config("dec.provider.management", function (provider) { |
||||
provider.inject({ |
||||
modules: [ |
||||
{ |
||||
value: "demo", |
||||
id: "decision-plugin-demo", |
||||
text: BI.i18nText("demo示例"), |
||||
cardType: "dec.plugin.demo", |
||||
cls: "dir-font-10", |
||||
gradeAuth: false, |
||||
}, |
||||
], |
||||
}); |
||||
}); |
||||
}()); |
Loading…
Reference in new issue