This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler-website.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 2be579b Automated deployment: 2a04acbf37128354219d87ab34da457e9a6b3552
2be579b is described below
commit 2be579b99d51c6c882c27e4ba84f55b2492a0543
Author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Apr 28 03:48:08 2021 +0000
Automated deployment: 2a04acbf37128354219d87ab34da457e9a6b3552
---
...ent.md.ca64247.js => development.md.f1da5e0.js} | 2 +-
en-us/development/architecture-design.html | 4 +-
en-us/development/backend-development.html | 24 +-
en-us/development/backend-development.json | 2 +-
en-us/development/dev-frontend-development.html | 641 ---------------------
en-us/development/dev-frontend-development.json | 6 -
.../development/development-environment-setup.html | 97 ++--
.../development/development-environment-setup.json | 2 +-
en-us/development/frontend-development.html | 40 +-
en-us/development/frontend-development.json | 2 +-
en-us/development/plugin-development.html | 4 +-
zh-cn/development/architecture-design.html | 4 +-
zh-cn/development/backend-development.html | 24 +-
zh-cn/development/backend-development.json | 2 +-
zh-cn/development/dev-frontend-development.html | 640 --------------------
zh-cn/development/dev-frontend-development.json | 6 -
.../development/development-environment-setup.html | 188 +++---
.../development/development-environment-setup.json | 2 +-
zh-cn/development/frontend-development.html | 37 +-
zh-cn/development/frontend-development.json | 2 +-
zh-cn/development/plugin-development.html | 4 +-
21 files changed, 221 insertions(+), 1512 deletions(-)
diff --git a/build/development.md.ca64247.js b/build/development.md.f1da5e0.js
similarity index 60%
rename from build/development.md.ca64247.js
rename to build/development.md.f1da5e0.js
index 4613f29..ffbd79d 100644
--- a/build/development.md.ca64247.js
+++ b/build/development.md.f1da5e0.js
@@ -1 +1 @@
-webpackJsonp([6],{1:function(e,t){e.exports=React},2:function(e,t){e.exports=ReactDOM},420:function(e,t,n){"use
strict";function l(e){return e&&e.__esModule?e:{default:e}}function
o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a
function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been
initialised - super() hasn't been called");return!t||"object"!=typeof
t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof
t&&null!==t)throw new Type [...]
\ No newline at end of file
+webpackJsonp([6],{1:function(e,t){e.exports=React},2:function(e,t){e.exports=ReactDOM},420:function(e,t,n){"use
strict";function l(e){return e&&e.__esModule?e:{default:e}}function
o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a
function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been
initialised - super() hasn't been called");return!t||"object"!=typeof
t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof
t&&null!==t)throw new Type [...]
\ No newline at end of file
diff --git a/en-us/development/architecture-design.html
b/en-us/development/architecture-design.html
index 23ed877..26f52ac 100644
--- a/en-us/development/architecture-design.html
+++ b/en-us/development/architecture-design.html
@@ -10,7 +10,7 @@
<link rel="stylesheet" href="/build/vendor.57fae06.css">
</head>
<body>
- <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/en-us/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">中</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant- [...]
+ <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/en-us/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">中</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant- [...]
<p>Before explaining the architecture of the schedule system, let us first
understand the common nouns of the schedule system.</p>
<h3>1.Noun Interpretation</h3>
<p><strong>DAG:</strong> Full name Directed Acyclic Graph,referred to as
DAG。Tasks in the workflow are assembled in the form of directed acyclic graphs,
which are topologically traversed from nodes with zero indegrees of ingress
until there are no successor nodes. For example, the following picture:</p>
@@ -292,7 +292,7 @@ Public <span class="hljs-class"><span
class="hljs-keyword">class</span> <span cl
<script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
<script>window.rootPath = '';</script>
<script src="/build/vendor.d55c00d.js"></script>
- <script src="/build/development.md.ca64247.js"></script>
+ <script src="/build/development.md.f1da5e0.js"></script>
<script>
var _hmt = _hmt || [];
(function() {
diff --git a/en-us/development/backend-development.html
b/en-us/development/backend-development.html
index 7b07019..8cd56c7 100644
--- a/en-us/development/backend-development.html
+++ b/en-us/development/backend-development.html
@@ -10,13 +10,13 @@
<link rel="stylesheet" href="/build/vendor.57fae06.css">
</head>
<body>
- <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/en-us/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">中</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant- [...]
+ <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/en-us/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">中</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant- [...]
<h2>Environmental requirements</h2>
<ul>
-<li>MySQL (5.5+) : Must be installed</li>
-<li>JDK (1.8+) : Must be installed</li>
-<li>ZooKeeper (3.4.6+) :Must be installed</li>
-<li>Maven (3.3+) :Must be installed</li>
+<li>MySQL (5.5+) : Must be installed</li>
+<li>JDK (1.8+) : Must be installed</li>
+<li>ZooKeeper (3.4.6+) : Must be installed</li>
+<li>Maven (3.3+) : Must be installed</li>
</ul>
<p>Because the dolphinscheduler-rpc module in DolphinScheduler uses Grpc, you
need to use Maven to compile the generated classes.
For those who are not familiar with maven, please refer to: <a
href="http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html">maven
in five minutes</a>(3.3+)</p>
@@ -36,12 +36,12 @@ For those who are not familiar with maven, please refer to:
<a href="http://mave
<li>View directory</li>
</ul>
<p>After normal compilation, it will generate
<code>./dolphinscheduler-dist/target/apache-dolphinscheduler-{version}-bin.tar.gz</code>
in the current directory.</p>
-<pre><code> bin
- conf
- lib
- script
- sql
- install.sh
+<pre><code>bin
+conf
+lib
+script
+sql
+install.sh
</code></pre>
<ul>
<li>Description</li>
@@ -58,7 +58,7 @@ install.sh : one-click deployment script
<script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
<script>window.rootPath = '';</script>
<script src="/build/vendor.d55c00d.js"></script>
- <script src="/build/development.md.ca64247.js"></script>
+ <script src="/build/development.md.f1da5e0.js"></script>
<script>
var _hmt = _hmt || [];
(function() {
diff --git a/en-us/development/backend-development.json
b/en-us/development/backend-development.json
index db16767..25957bf 100644
--- a/en-us/development/backend-development.json
+++ b/en-us/development/backend-development.json
@@ -1,6 +1,6 @@
{
"filename": "backend-development.md",
- "__html": "<h1>Backend development documentation</h1>\n<h2>Environmental
requirements</h2>\n<ul>\n<li>MySQL (5.5+) : Must be installed</li>\n<li>JDK
(1.8+) : Must be installed</li>\n<li>ZooKeeper (3.4.6+) :Must be
installed</li>\n<li>Maven (3.3+) :Must be installed</li>\n</ul>\n<p>Because the
dolphinscheduler-rpc module in DolphinScheduler uses Grpc, you need to use
Maven to compile the generated classes.\nFor those who are not familiar with
maven, please refer to: <a href=\"http://m [...]
+ "__html": "<h1>Backend development documentation</h1>\n<h2>Environmental
requirements</h2>\n<ul>\n<li>MySQL (5.5+) : Must be installed</li>\n<li>JDK
(1.8+) : Must be installed</li>\n<li>ZooKeeper (3.4.6+) : Must be
installed</li>\n<li>Maven (3.3+) : Must be installed</li>\n</ul>\n<p>Because
the dolphinscheduler-rpc module in DolphinScheduler uses Grpc, you need to use
Maven to compile the generated classes.\nFor those who are not familiar with
maven, please refer to: <a href=\"http://m [...]
"link": "/dist/en-us/development/backend-development.html",
"meta": {}
}
\ No newline at end of file
diff --git a/en-us/development/dev-frontend-development.html
b/en-us/development/dev-frontend-development.html
deleted file mode 100644
index f443d8a..0000000
--- a/en-us/development/dev-frontend-development.html
+++ /dev/null
@@ -1,641 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0,
maximum-scale=1.0, user-scalable=no">
- <meta name="keywords" content="dev-frontend-development">
- <meta name="description" content="dev-frontend-development">
- <title>dev-frontend-development</title>
- <link rel="shortcut icon" href="/img/favicon.ico">
- <link rel="stylesheet" href="/build/vendor.57fae06.css">
-</head>
-<body>
- <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/en-us/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">中</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant- [...]
-<h3>Technical selection</h3>
-<pre><code>Vue mvvm framework
-
-Es6 ECMAScript 6.0
-
-Element-ui
-
-form-create JSON form generator
-
-D3 Visual Library Chart Library
-
-Jsplumb connection plugin library
-
-Lodash high performance JavaScript utility library
-</code></pre>
-<h3>Development environment</h3>
-<ul>
-<li>
-<h4>Node installation</h4>
-</li>
-</ul>
-<p>Node package download (Note: The node version must be a long-term version,
currently the highest version of Node supports 14+)
<code>https://nodejs.org/en/</code>
-Node.js extension, you can install nvm management node version, install nrm
management mirror source</p>
-<ul>
-<li>
-<h4>Front-end project construction</h4>
-</li>
-</ul>
-<p>Use the command line mode <code>cd</code> to enter the
<code>dolphinscheduler-ui</code> project directory, check the usage status of
the npm mirror source <code>npm get registry</code>, if it is not a Taobao
mirror, set the mirror to Taobao mirror <code>npm config set registry
http://registry.npm.taobao.org</code>, then execute <code>npm install</code> to
pull project dependency packages</p>
-<ul>
-<li>Configure <code>.env</code> file for the interface to interact with the
backend</li>
-</ul>
-<p>Open the <code>.env</code> file in the <code>dolphinscheduler-ui</code>
directory, and add the back-end service ip address and port to the file to
interact with the back-end. The contents of the <code>.env</code> file are as
follows:</p>
-<pre><code># Proxy interface address (modified by yourself)
-API_BASE = http://192.168.xx.xx:12345(Note: API interface must be written in
the form of IP address, not http://localhost:12345)
-
-# If you need to access the project with ip, you can remove the "#"
(example)
-#DEV_HOST = 192.168.xx.xx
-</code></pre>
-<blockquote>
-<h5>! ! ! Special attention here. If the project reports a "node-sass
error" error while pulling the dependency package, execute the following
command again after execution.</h5>
-</blockquote>
-<pre><code>npm install node-sass --unsafe-perm //Install node-sass dependency
separately
-</code></pre>
-<ul>
-<li>
-<h4>Development environment operation</h4>
-</li>
-<li><code>npm start</code> project development environment (after startup
address <a href="http://localhost:8888/#/">http://localhost:8888/#/</a>)</li>
-</ul>
-<h4>Front-end project release</h4>
-<ul>
-<li><code>npm run build</code> project packaging (after packaging, the root
directory will create a folder called dist for publishing Nginx online)</li>
-</ul>
-<p>Run the <code>npm run build</code> command to generate a package file
(dist) package</p>
-<p>Copy it to the corresponding directory of the server (front-end service
static page storage directory)</p>
-<p>Visit address<code>http://localhost:8888/#/</code></p>
-<h4>Start with node and daemon under Linux</h4>
-<p>Install pm2 <code>npm install -g pm2</code></p>
-<p>Execute <code>pm2 start npm -- run dev</code> to start the project in the
project <code>dolphinscheduler-ui</code>root directory</p>
-<h4>command</h4>
-<ul>
-<li>
-<p>Start <code>pm2 start npm -- run dev</code></p>
-</li>
-<li>
-<p>Stop <code>pm2 stop npm</code></p>
-</li>
-<li>
-<p>delete <code>pm2 delete npm</code></p>
-</li>
-<li>
-<p>Status <code>pm2 list</code></p>
-</li>
-</ul>
-<pre><code>
-[root@localhost dolphinscheduler-ui]# pm2 start npm -- run dev
-[PM2] Applying action restartProcessId on app [npm](ids: 0)
-[PM2] [npm](0) ✓
-[PM2] Process successfully started
-┌──────────┬────┬─────────┬──────┬──────┬────────┬─────────┬────────┬─────┬──────────┬──────┬──────────┐
-│ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │
mem │ user │ watching │
-├──────────┼────┼─────────┼──────┼──────┼────────┼─────────┼────────┼─────┼──────────┼──────┼──────────┤
-│ npm │ 0 │ N/A │ fork │ 6168 │ online │ 31 │ 0s │ 0% │
5.6 MB │ root │ disabled │
-└──────────┴────┴─────────┴──────┴──────┴────────┴─────────┴────────┴─────┴──────────┴──────┴──────────┘
- Use `pm2 show <id|name>` to get more details about an app
-
-</code></pre>
-<h3>Project directory structure</h3>
-<p><code>build</code> some webpack configurations for packaging and
development environment projects</p>
-<p><code>node_modules</code> development environment node dependency
package</p>
-<p><code>src</code> project required documents</p>
-<p><code>src => images</code> public image storage</p>
-<p><code>src => js</code> js/vue</p>
-<p><code>src => lib</code> internal components of the company (company
component library can be deleted after open source)</p>
-<p><code>src => sass</code> sass file One page corresponds to a sass
file</p>
-<p><code>src => view</code> page file One page corresponds to an html
file</p>
-<pre><code>> Projects are developed using vue single page application (SPA)
-- All page entry files are in the `src/js/conf/${ corresponding page filename
=> home} index.js` entry file
-- The corresponding sass file is in `src/sass/conf/${corresponding page
filename => home}/index.scss`
-- The corresponding html file is in `src/view/${corresponding page filename
=> home}/index.html`
-</code></pre>
-<p>Public module and utill <code>src/js/module</code></p>
-<p><code>components</code> => internal project common components</p>
-<p><code>download</code> => download component</p>
-<p><code>echarts</code> => chart component</p>
-<p><code>filter</code> => filter and vue pipeline</p>
-<p><code>i18n</code> => internationalization</p>
-<p><code>io</code> => io request encapsulation based on axios</p>
-<p><code>mixin</code> => vue mixin public part for disabled operation</p>
-<p><code>permissions</code> => permission operation</p>
-<p><code>util</code> => tool</p>
-<h3>System function module</h3>
-<p>Home => <code>http://localhost:8888/#/home</code></p>
-<p>Project Management =>
<code>http://localhost:8888/#/projects/list</code></p>
-<pre><code>| Project Home
-| Workflow relationship
-| Workflow
- - Workflow definition
- - Workflow instance
- - Task instance
-</code></pre>
-<p>Resource Management =>
<code>http://localhost:8888/#/resource/file</code></p>
-<pre><code>| File Management
-| udf Management
- - Resource Management
- - Function management
-
-
-
-</code></pre>
-<p>Data Source Management =>
<code>http://localhost:8888/#/datasource/list</code></p>
-<p>monitoring Center =>
<code>http://localhost:8888/#/monitor/servers/master</code></p>
-<pre><code>| Service management
- - Master
- - Worker
- - Zookeeper
- - DB
-| Statistics management
- - Statistics
-</code></pre>
-<p>Security Center =>
<code>http://localhost:8888/#/security/tenant</code></p>
-<pre><code>| Tenant Management
-| User Management
-| Alarm Group Management
-| Alarm instance management
-| Worker Group Management
-| Yarn queue management
-| Token Management
-</code></pre>
-<p>User Center => <code>http://localhost:8888/#/user/account</code></p>
-<h2>Routing and state management</h2>
-<p>The project <code>src/js/conf/home</code> is divided into</p>
-<p><code>pages</code> => route to page directory</p>
-<pre><code> The page file corresponding to the routing address
-</code></pre>
-<p><code>router</code> => route management</p>
-<pre><code>vue router, the entry file index.js in each page will be
registered. Specific operations: https://router.vuejs.org/zh/
-</code></pre>
-<p><code>store</code> => status management</p>
-<pre><code>The page corresponding to each route has a state management file
divided into:
-
-actions => mapActions =>
Details:https://vuex.vuejs.org/zh/guide/actions.html
-
-getters => mapGetters =>
Details:https://vuex.vuejs.org/zh/guide/getters.html
-
-index => entrance
-mutations => mapMutations =>
Details:https://vuex.vuejs.org/zh/guide/mutations.html
-
-state => mapState => Details:https://vuex.vuejs.org/zh/guide/state.html
-
-Specific action:https://vuex.vuejs.org/zh/
-
-</code></pre>
-<h2>Menu added</h2>
-<p>The public menu only needs to be in
<code>/src/js/conf/home/router/index.js</code> Just add it,Such as: Home</p>
-<pre><code> {
- path: '/home',
- name: 'home',
- component: resolve => require(['../pages/home/index'], resolve),
- meta: {
- title: `${i18n.$t('Home')} - DolphinScheduler`,
- refresh_in_switched_tab: true
- }
- }
-</code></pre>
-<h2>Exception handling</h2>
-<p>Intercept all request requests in the <code>/src/js/module/io/index.js
file</code>, and analyze and handle the status code returned by the interface
through the response interceptor. The code is as follows</p>
-<pre><code>import io from '@/module/axios/index'
-import cookies from 'js-cookie'
-
-const apiPrefix = '/dolphinscheduler'
-const reSlashPrefix = /^\/+/
-
-const resolveURL = (url) => {
- if (url.indexOf('http') !== -1) {
- return url
- }
- if (url.charAt(0) !== '/') {
- return `${apiPrefix}/${url.replace(reSlashPrefix, '')}`
- }
-
- return url
-}
-
-/**
- * Resolve backend api url
- */
-export { resolveURL }
-
-/**
- * Set io default instance resolveUrl globally
- */
-io.config.resolveURL = resolveURL
-io.config.timeout = 0
-io.config.maxContentLength = 200000
-io.config.validateStatus = function (status) {
- if (status === 401 || status === 504) {
- window.location.href = `${PUBLIC_PATH}/view/login/index.html`
- return
- }
- return status
-}
-
-// io.config.emulateJSON = false
-const _propRequest = io.request
-
-// Add a local request interceptor
-io.request = (spec) => {
- return _propRequest.call(io, spec)
-}
-
-// Global response interceptor registion
-io.interceptors.response.use(
- response => {
- return response
- }, error => {
- // Do something with response error
- return Promise.reject(error)
- }
-)
-
-// Global request interceptor registion
-io.interceptors.request.use(
- config => {
- const sIdCookie = cookies.get('sessionId')
- const sessionId = sessionStorage.getItem('sessionId')
- const requstUrl = config.url.substring(config.url.lastIndexOf('/') + 1)
- if ((!sIdCookie || (sessionId && sessionId !== sIdCookie))
&& requstUrl !== 'login') {
- window.location.href = `${PUBLIC_PATH}/view/login/index.html`
- } else {
- const { method } = config
- if (method === 'get') {
- config.params = Object.assign({}, config.params, {
- _t: Math.random()
- })
- }
- config.headers = config.headers || {}
- const language = cookies.get('language')
- if (language) config.headers.language = language
- if (sIdCookie) config.headers.sessionId = sIdCookie
- return config
- }
- }, error => {
- // Do something with request error
- return Promise.reject(error)
- }
-)
-
-export default io
-</code></pre>
-<h2>specification</h2>
-<h2>Vue specification</h2>
-<h5>1.Component name</h5>
-<p>The component is named multiple words and is connected with a wire (-) to
avoid conflicts with HTML tags and a clearer structure.</p>
-<pre><code>// positive example
-export default {
- name: 'page-article-item'
-}
-</code></pre>
-<h5>2.Component files</h5>
-<p>The internal common component of the <code>src/js/module/components</code>
project writes the folder name with the same name as the file name. The
subcomponents and util tools that are split inside the common component are
placed in the internal <code>_source</code> folder of the component.</p>
-<pre><code>└── components
- ├── header
- ├── header.vue
- └── _source
- └── nav.vue
- └── util.js
- ├── conditions
- ├── conditions.vue
- └── _source
- └── search.vue
- └── util.js
-</code></pre>
-<h5>3.Prop</h5>
-<p>When you define Prop, you should always name it in camel format (camelCase)
and use the connection line (-) when assigning values to the parent
component.This follows the characteristics of each language, because it is
case-insensitive in HTML tags, and the use of links is more friendly; in
JavaScript, the more natural is the hump name.</p>
-<pre><code>// Vue
-props: {
- articleStatus: Boolean
-}
-// HTML
-<article-item :article-status="true"></article-item>
-</code></pre>
-<p>The definition of Prop should specify its type, defaults, and validation as
much as possible.</p>
-<p>Example:</p>
-<pre><code>props: {
- attrM: Number,
- attrA: {
- type: String,
- required: true
- },
- attrZ: {
- type: Object,
- // The default value of the array/object should be returned by a
factory function
- default: function () {
- return {
- msg: 'achieve you and me'
- }
- }
- },
- attrE: {
- type: String,
- validator: function (v) {
- return !(['success', 'fail'].indexOf(v) === -1)
- }
- }
-}
-</code></pre>
-<h5>4.v-for</h5>
-<p>When performing v-for traversal, you should always bring a key value to
make rendering more efficient when updating the DOM.</p>
-<pre><code><ul>
- <li v-for="item in list" :key="item.id">
- {{ item.title }}
- </li>
-</ul>
-</code></pre>
-<p>v-for should be avoided on the same element as v-if (<code>for example:
<li></code>) because v-for has a higher priority than v-if. To avoid
invalid calculations and rendering, you should try to use v-if Put it on top of
the container's parent element.</p>
-<pre><code><ul v-if="showList">
- <li v-for="item in list" :key="item.id">
- {{ item.title }}
- </li>
-</ul>
-</code></pre>
-<h5>5.v-if / v-else-if / v-else</h5>
-<p>If the elements in the same set of v-if logic control are logically
identical, Vue reuses the same part for more efficient element switching,
<code>such as: value</code>. In order to avoid the unreasonable effect of
multiplexing, you should add key to the same element for identification.</p>
-<pre><code><div v-if="hasData" key="mazey-data">
- <span>{{ mazeyData }}</span>
-</div>
-<div v-else key="mazey-none">
- <span>no data</span>
-</div>
-</code></pre>
-<h5>6.Instruction abbreviation</h5>
-<p>In order to unify the specification, the instruction abbreviation is always
used. Using <code>v-bind</code>, <code>v-on</code> is not bad. Here is only a
unified specification.</p>
-<pre><code><input :value="mazeyUser"
@click="verifyUser">
-</code></pre>
-<h5>7.Top-level element order of single file components</h5>
-<p>Styles are packaged in a file, all the styles defined in a single vue file,
the same name in other files will also take effect. All will have a top class
name before creating a component.
-Note: The sass plugin has been added to the project, and the sas syntax can be
written directly in a single vue file.
-For uniformity and ease of reading, they should be placed in the order of
<code><template></code>、<code><script></code>、<code><style></code>.</p>
-<pre><code><template>
- <div class="test-model">
- test
- </div>
-</template>
-<script>
- export default {
- name: "test",
- data() {
- return {}
- },
- props: {},
- methods: {},
- watch: {},
- beforeCreate() {
- },
- created() {
- },
- beforeMount() {
- },
- mounted() {
- },
- beforeUpdate() {
- },
- updated() {
- },
- beforeDestroy() {
- },
- destroyed() {
- },
- computed: {},
- components: {},
- }
-</script>
-
-<style lang="scss" rel="stylesheet/scss">
- .test-model {
-
- }
-</style>
-
-</code></pre>
-<h2>JavaScript specification</h2>
-<h5>1.var / let / const</h5>
-<p>It is recommended to no longer use var, but use let / const, prefer const.
The use of any variable must be declared in advance, except that the function
defined by function can be placed anywhere.</p>
-<h5>2.quotes</h5>
-<pre><code>const foo = 'after division'
-const bar = `${foo},ront-end engineer`
-</code></pre>
-<h5>3.function</h5>
-<p>Anonymous functions use the arrow function uniformly. When multiple
parameters/return values are used, the object's structure assignment is used
first.</p>
-<pre><code>function getPersonInfo ({name, sex}) {
- // ...
- return {name, gender}
-}
-</code></pre>
-<p>The function name is uniformly named with a camel name. The beginning of
the capital letter is a constructor. The lowercase letters start with ordinary
functions, and the new operator should not be used to operate ordinary
functions.</p>
-<h5>4.object</h5>
-<pre><code>const foo = {a: 0, b: 1}
-const bar = JSON.parse(JSON.stringify(foo))
-
-const foo = {a: 0, b: 1}
-const bar = {...foo, c: 2}
-
-const foo = {a: 3}
-Object.assign(foo, {b: 4})
-
-const myMap = new Map([])
-for (let [key, value] of myMap.entries()) {
- // ...
-}
-</code></pre>
-<h5>5.module</h5>
-<p>Unified management of project modules using import / export.</p>
-<pre><code>// lib.js
-export default {}
-
-// app.js
-import app from './lib'
-</code></pre>
-<p>Import is placed at the top of the file.</p>
-<p>If the module has only one output value, use <code>export
default</code>,otherwise no.</p>
-<h2>HTML / CSS</h2>
-<h5>1.Label</h5>
-<p>Do not write the type attribute when referencing external CSS or
JavaScript. The HTML5 default type is the text/css and text/javascript
properties, so there is no need to specify them.</p>
-<pre><code><link rel="stylesheet"
href="//www.test.com/css/test.css">
-<script src="//www.test.com/js/test.js"></script>
-</code></pre>
-<h5>2.Naming</h5>
-<p>The naming of Class and ID should be semantic, and you can see what you are
doing by looking at the name; multiple words are connected by a link.</p>
-<pre><code>// positive example
-.test-header{
- font-size: 20px;
-}
-</code></pre>
-<h5>3.Attribute abbreviation</h5>
-<p>CSS attributes use abbreviations as much as possible to improve the
efficiency and ease of understanding of the code.</p>
-<pre><code>// counter example
-border-width: 1px;
-border-style: solid;
-border-color: #ccc;
-
-// positive example
-border: 1px solid #ccc;
-</code></pre>
-<h5>4.Document type</h5>
-<p>The HTML5 standard should always be used.</p>
-<pre><code><!DOCTYPE html>
-</code></pre>
-<h5>5.Notes</h5>
-<p>A block comment should be written to a module file.</p>
-<pre><code>/**
-* @module mazey/api
-* @author Mazey <[email protected]>
-* @description test.
-* */
-</code></pre>
-<h2>interface</h2>
-<h5>All interfaces are returned as Promise</h5>
-<p>Note that non-zero is wrong for catching catch</p>
-<pre><code>const test = () => {
- return new Promise((resolve, reject) => {
- resolve({
- a:1
- })
- })
-}
-
-// transfer
-test.then(res => {
- console.log(res)
- // {a:1}
-})
-</code></pre>
-<p>Normal return</p>
-<pre><code>{
- code:0,
- data:{}
- msg:'success'
-}
-</code></pre>
-<p>Error return</p>
-<pre><code>{
- code:10000,
- data:{}
- msg:'failed'
-}
-</code></pre>
-<p>If the interface is a post request, the Content-Type defaults to
application/x-www-form-urlencoded; if the Content-Type is changed to
application/json,
-Interface parameter transfer needs to be changed to the following way</p>
-<pre><code>io.post('url', payload, null, null, { emulateJSON: false } res
=> {
- resolve(res)
-}).catch(e => {
- reject(e)
-})
-</code></pre>
-<h5>Related interface path</h5>
-<p>dag related interface <code>src/js/conf/home/store/dag/actions.js</code></p>
-<p>Data Source Center Related Interfaces
<code>src/js/conf/home/store/datasource/actions.js</code></p>
-<p>Project Management Related Interfaces
<code>src/js/conf/home/store/projects/actions.js</code></p>
-<p>Resource Center Related Interfaces
<code>src/js/conf/home/store/resource/actions.js</code></p>
-<p>Monitoring center Related Interface
<code>src/js/conf/home/store/monitor/actions.js</code></p>
-<p>Security Center Related Interfaces
<code>src/js/conf/home/store/security/actions.js</code></p>
-<p>User Center Related Interfaces
<code>src/js/conf/home/store/user/actions.js</code></p>
-<h2>Extended development</h2>
-<h5>1.Add node</h5>
-<p>(1) First place the icon icon of the node in the
<code>src/js/conf/home/pages/dag/img</code>folder, and note the English name of
the node defined by the <code>toolbar_${in the background. For example:
SHELL}.png</code></p>
-<p>(2) Find the <code>tasksType</code> object in
<code>src/js/conf/home/pages/dag/_source/config.js</code> and add it to it.</p>
-<pre><code>'DEPENDENT': { // The background definition node type English
name is used as the key value
- desc: 'DEPENDENT', // tooltip desc
- color: '#2FBFD8' // The color represented is mainly used for tree and gantt
-}
-</code></pre>
-<p>(3) Add a <code>${node type (lowercase)}</code>.vue file in
<code>src/js/conf/home/pages/dag/_source/formModel/tasks</code>. The contents
of the components related to the current node are written here. Must belong to
a node component must have a function _verification () After the verification
is successful, the relevant data of the current component is thrown to the
parent component.</p>
-<pre><code>/**
- * Verification
-*/
- _verification () {
- // datasource subcomponent verification
- if (!this.$refs.refDs._verifDatasource()) {
- return false
- }
-
- // verification function
- if (!this.method) {
- this.$message.warning(`${i18n.$t('Please enter method')}`)
- return false
- }
-
- // localParams subcomponent validation
- if (!this.$refs.refLocalParams._verifProp()) {
- return false
- }
- // store
- this.$emit('on-params', {
- type: this.type,
- datasource: this.datasource,
- method: this.method,
- localParams: this.localParams
- })
- return true
- }
-</code></pre>
-<p>(4) Common components used inside the node component are
under<code>_source</code>, and <code>commcon.js</code> is used to configure
public data.</p>
-<h5>2.Increase the status type</h5>
-<p>(1) Find the <code>tasksState</code> object in
<code>src/js/conf/home/pages/dag/_source/config.js</code> and add it to it.</p>
-<pre><code> 'WAITTING_DEPEND': { // 'WAITTING_DEPEND': { //Backend defines
state type, frontend is used as key value
- id: 11, // front-end definition id is used as a sort
- desc: `${i18n.$t('waiting for dependency')}`, // tooltip desc
- color: '#5101be', // The color represented is mainly used for tree and gantt
- icoUnicode: '&#xe68c;', // font icon
- isSpin: false // whether to rotate (requires code judgment)
-}
-</code></pre>
-<h5>3.Add the action bar tool</h5>
-<p>(1) Find the <code>toolOper</code> object in
<code>src/js/conf/home/pages/dag/_source/config.js</code> and add it to it.</p>
-<pre><code>{
- code: 'pointer', // tool identifier
- icon: '&#xe781;', // tool icon
- disable: disable, // disable
- desc: `${i18n.$t('Drag node and selected item')}` // tooltip desc
-}
-</code></pre>
-<p>(2) Tool classes are returned as a constructor
<code>src/js/conf/home/pages/dag/_source/plugIn</code></p>
-<p><code>downChart.js</code> => dag image download processing</p>
-<p><code>dragZoom.js</code> => mouse zoom effect processing</p>
-<p><code>jsPlumbHandle.js</code> => drag and drop line processing</p>
-<p><code>util.js</code> => belongs to the <code>plugIn</code> tool
class</p>
-<p>The operation is handled in the
<code>src/js/conf/home/pages/dag/_source/dag.js</code> =>
<code>toolbarEvent</code> event.</p>
-<h5>3.Add a routing page</h5>
-<p>(1) First add a routing
address<code>src/js/conf/home/router/index.js</code> in route management</p>
-<pre><code>routing address{
- path: '/test', // routing address
- name: 'test', // alias
- component: resolve => require(['../pages/test/index'], resolve), //
route corresponding component entry file
- meta: {
- title: `${i18n.$t('test')} - EasyScheduler` // title display
- }
-},
-</code></pre>
-<p>(2)Create a <code>test</code> folder in <code>src/js/conf/home/pages</code>
and create an <code>index.vue</code>entry file in the folder.</p>
-<pre><code>This will give you direct access to`http://localhost:8888/#/test`
-</code></pre>
-<h5>4.Increase the preset mailbox</h5>
-<p>Find the <code>src/lib/localData/email.js</code> startup and timed email
address input to automatically pull down the match.</p>
-<pre><code>export default
["[email protected]","[email protected]","[email protected]"]
-</code></pre>
-<h5>5.Authority management and disabled state processing</h5>
-<p>The permission gives the userType according to the backUser interface
<code>getUserInfo</code> interface:
<code>"ADMIN_USER/GENERAL_USER"</code>permission to control whether
the page operation button is <code>disabled</code>.</p>
-<p>specific operation:<code>src/js/module/permissions/index.js</code></p>
-<p>disabled processing:<code>src/js/module/mixin/disabledState.js</code></p>
-</div></section><footer class="footer-container"><div class="footer-body"><img
src="/img/ds_gray.svg"/><div class="cols-container"><div class="col
col-12"></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a
href="/en-us/development/architecture-design.html"
target="_self">Overview</a></dd><dd><a
href="/en-us/docs/latest/user_doc/quick-start.html" target="_self">Quick
start</a></dd><dd><a href="/en-us/development/backend-development.html"
target="_self">Developer guide</a></dd>< [...]
- <script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-with-addons.min.js"></script>
- <script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
- <script>window.rootPath = '';</script>
- <script src="/build/vendor.d55c00d.js"></script>
- <script src="/build/development.md.ca64247.js"></script>
- <script>
- var _hmt = _hmt || [];
- (function() {
- var hm = document.createElement("script");
- hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
- var s = document.getElementsByTagName("script")[0];
- s.parentNode.insertBefore(hm, s);
- })();
- </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/en-us/development/dev-frontend-development.json
b/en-us/development/dev-frontend-development.json
deleted file mode 100644
index 46239ba..0000000
--- a/en-us/development/dev-frontend-development.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "filename": "dev-frontend-development.md",
- "__html": "<h1>Front-end development documentation</h1>\n<h3>Technical
selection</h3>\n<pre><code>Vue mvvm framework\n\nEs6 ECMAScript
6.0\n\nElement-ui\n\nform-create JSON form generator\n\nD3 Visual Library
Chart Library\n\nJsplumb connection plugin library\n\nLodash high performance
JavaScript utility library\n</code></pre>\n<h3>Development
environment</h3>\n<ul>\n<li>\n<h4>Node installation</h4>\n</li>\n</ul>\n<p>Node
package download (Note: The node version must be a long-term ve [...]
- "link": "/dist/en-us/development/dev-frontend-development.html",
- "meta": {}
-}
\ No newline at end of file
diff --git a/en-us/development/development-environment-setup.html
b/en-us/development/development-environment-setup.html
index 27467f8..0601c03 100644
--- a/en-us/development/development-environment-setup.html
+++ b/en-us/development/development-environment-setup.html
@@ -10,7 +10,7 @@
<link rel="stylesheet" href="/build/vendor.57fae06.css">
</head>
<body>
- <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/en-us/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">中</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant- [...]
+ <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/en-us/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">中</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant- [...]
<h4>Preparation</h4>
<ol>
<li>
@@ -23,21 +23,21 @@
<p>Clone your forked repository to the local file system.</p>
</li>
</ol>
-<pre><code> git clone https://github.com/apache/dolphinscheduler.git
+<pre><code class="language-bash">git <span class="hljs-built_in">clone</span>
https://github.com/apache/dolphinscheduler.git
</code></pre>
<ol start="4">
<li>After finished the clone, go into the project directory and execute the
following commands:</li>
</ol>
-<pre><code> git branch -a #check the branch
- git checkout dev #switch to the dev branch
- git pull #sychronize the branch with the remote branch
- mvn -U clean package -Prelease -Dmaven.test.skip=true #because the
project uses gRPC, you need to compile the project to generate the required
classes
+<pre><code class="language-bash">git branch -a <span
class="hljs-comment">#check the branch</span>
+git checkout dev <span class="hljs-comment">#switch to the dev branch</span>
+git pull <span class="hljs-comment">#sychronize the branch with the remote
branch</span>
+mvn -U clean package -Prelease -Dmaven.test.skip=<span
class="hljs-literal">true</span> <span class="hljs-comment">#mvn package</span>
</code></pre>
<h4>Install node</h4>
<ol>
<li>
<p>Install nvm<br>
-curl -o- <a
href="https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh">https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh</a></p>
+curl -o- <a
href="https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh">https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh</a>
| bash</p>
</li>
<li>
<p>Refresh the environment variables<br>
@@ -45,8 +45,8 @@ source ~/.bash_profile</p>
</li>
<li>
<p>Install node<br>
-nvm install v12.12.0<br>
-note:mac users could install npm through brew:brew install npm</p>
+nvm install v12.20.2
+note: Mac users could install npm through brew: brew install npm</p>
</li>
<li>
<p>Validate the node installation<br>
@@ -57,7 +57,7 @@ node --version</p>
<ol>
<li>
<p>Download zookeeper<br>
-<a
href="http://apache.mirrors.hoobly.com/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz">http://apache.mirrors.hoobly.com/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz</a></p>
+<a
href="https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz">https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz</a></p>
</li>
<li>
<p>Copy the zookeeper config file<br>
@@ -76,10 +76,10 @@ dataDir=./tmp/zookeeper</p>
</ol>
<h4>Create database</h4>
<p>Create user, user name: ds_user, password: dolphinscheduler</p>
-<pre><code> mysql> CREATE DATABASE dolphinscheduler DEFAULT CHARACTER
SET utf8 DEFAULT COLLATE utf8_general_ci;
- mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'ds_user'@'%'
IDENTIFIED BY 'dolphinscheduler';
- mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO
'ds_user'@'localhost' IDENTIFIED BY 'dolphinscheduler';
- mysql> flush privileges;
+<pre><code>mysql> CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET
utf8 DEFAULT COLLATE utf8_general_ci;
+mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'ds_user'@'%'
IDENTIFIED BY 'dolphinscheduler';
+mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'ds_user'@'localhost'
IDENTIFIED BY 'dolphinscheduler';
+mysql> flush privileges;
</code></pre>
<h4>Set up the front-end</h4>
<ol>
@@ -101,10 +101,10 @@ file-->open</p>
<p>Modify the database configuration in the datasource.properties file in the
resource directory of the dao module</p>
</li>
</ol>
-<pre><code> spring.datasource.driver-class-name=com.mysql.jdbc.Driver
- spring.datasource.url=jdbc:mysql://localhost:3306/dolphinscheduler
- spring.datasource.username=ds_user
- spring.datasource.password=dolphinscheduler
+<pre><code>spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8
+spring.datasource.username=ds_user
+spring.datasource.password=dolphinscheduler
</code></pre>
<ol start="3">
<li>
@@ -114,17 +114,11 @@ file-->open</p>
<p>Refresh the dao module, run the main method of
org.apache.dolphinscheduler.dao.upgrade.shell.CreateDolphinScheduler to
automatically insert the tables and data required by the project.</p>
</li>
<li>
-<p>Modify the service module<br>
+<p>Modify the service module
try to change the zookeeper.quorum part of the zookeeper.properties file
zookeeper.quorum=localhost:2181</p>
</li>
-<li>
-<p>Modify the .env file of the dolphinscheduler-ui module</p>
-</li>
</ol>
-<pre><code> API_BASE = http://localhost:12345
- DEV_HOST = localhost
-</code></pre>
<h4>Start the project</h4>
<ol>
<li>
@@ -136,52 +130,55 @@ zookeeper.quorum=localhost:2181</p>
run the main method of org.apache.dolphinscheduler.server.master.MasterServer,
you need to set the following VM options:</p>
</li>
</ol>
-<pre><code> -Dlogging.config=classpath:logback-master.xml
-Ddruid.mysql.usePingMethod=false
+<pre><code>-Dlogging.config=classpath:logback-master.xml
-Ddruid.mysql.usePingMethod=false
</code></pre>
<ol start="3">
<li>Start WorkerServer<br>
run the main method of org.apache.dolphinscheduler.server.worker.WorkerServer,
you need to set the following VM options:</li>
</ol>
-<pre><code> -Dlogging.config=classpath:logback-worker.xml
-Ddruid.mysql.usePingMethod=false
+<pre><code>-Dlogging.config=classpath:logback-worker.xml
-Ddruid.mysql.usePingMethod=false
</code></pre>
<ol start="4">
<li>Start ApiApplicationServer<br>
run the main method of org.apache.dolphinscheduler.api.ApiApplicationServer,
you need to set the following VM options:</li>
</ol>
-<pre><code> -Dlogging.config=classpath:logback-api.xml
-Dspring.profiles.active=api
+<pre><code>-Dlogging.config=classpath:logback-api.xml
-Dspring.profiles.active=api
</code></pre>
<ol start="5">
<li>We are not going to start the other modules. if they are required to be
started, check script/dolphinscheduler-daemon.sh and set them the same VM
Options.</li>
</ol>
-<pre><code> if [ "$command" = "api-server" ]; then
- LOG_FILE="-Dlogging.config=classpath:logback-api.xml
-Dspring.profiles.active=api"
- CLASS=org.apache.dolphinscheduler.api.ApiApplicationServer
- elif [ "$command" = "master-server" ]; then
- LOG_FILE="-Dlogging.config=classpath:logback-master.xml
-Ddruid.mysql.usePingMethod=false"
- CLASS=org.apache.dolphinscheduler.server.master.MasterServer
- elif [ "$command" = "worker-server" ]; then
- LOG_FILE="-Dlogging.config=classpath:logback-worker.xml
-Ddruid.mysql.usePingMethod=false"
- CLASS=org.apache.dolphinscheduler.server.worker.WorkerServer
- elif [ "$command" = "alert-server" ]; then
- LOG_FILE="-Dlogback.configurationFile=conf/logback-alert.xml"
- CLASS=org.apache.dolphinscheduler.alert.AlertServer
- elif [ "$command" = "logger-server" ]; then
- CLASS=org.apache.dolphinscheduler.server.log.LoggerServer
- else
- echo "Error: No command named \`$command' was found."
- exit 1
- fi
+<pre><code>if [ "$command" = "api-server" ]; then
+ LOG_FILE="-Dlogging.config=classpath:logback-api.xml
-Dspring.profiles.active=api"
+ CLASS=org.apache.dolphinscheduler.api.ApiApplicationServer
+elif [ "$command" = "master-server" ]; then
+ LOG_FILE="-Dlogging.config=classpath:logback-master.xml
-Ddruid.mysql.usePingMethod=false"
+ CLASS=org.apache.dolphinscheduler.server.master.MasterServer
+elif [ "$command" = "worker-server" ]; then
+ LOG_FILE="-Dlogging.config=classpath:logback-worker.xml
-Ddruid.mysql.usePingMethod=false"
+ CLASS=org.apache.dolphinscheduler.server.worker.WorkerServer
+elif [ "$command" = "alert-server" ]; then
+ LOG_FILE="-Dlogback.configurationFile=conf/logback-alert.xml"
+ CLASS=org.apache.dolphinscheduler.alert.AlertServer
+elif [ "$command" = "logger-server" ]; then
+ CLASS=org.apache.dolphinscheduler.server.log.LoggerServer
+else
+ echo "Error: No command named '$command' was found."
+ exit 1
+fi
</code></pre>
<ol start="6">
-<li>cd dolphinscheduler-ui directory and run npm run start</li>
+<li>Start web ui</li>
</ol>
+<pre><code class="language-bash"><span class="hljs-built_in">cd</span>
dolphinscheduler-ui
+npm run start
+</code></pre>
<h4>Visit the project</h4>
<ol>
<li>
-<p>Visit <a
href="http://localhost:12345/dolphinscheduler">http://localhost:12345/dolphinscheduler</a></p>
+<p>Visit <a href="http://localhost:8888">http://localhost:8888</a></p>
</li>
<li>
-<p>Sign in with the administrator account
+<p>Sign in with the administrator account<br>
username: admin<br>
password: dolphinscheduler123</p>
</li>
@@ -191,7 +188,7 @@ password: dolphinscheduler123</p>
<script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
<script>window.rootPath = '';</script>
<script src="/build/vendor.d55c00d.js"></script>
- <script src="/build/development.md.ca64247.js"></script>
+ <script src="/build/development.md.f1da5e0.js"></script>
<script>
var _hmt = _hmt || [];
(function() {
diff --git a/en-us/development/development-environment-setup.json
b/en-us/development/development-environment-setup.json
index 3392282..b1d2b18 100644
--- a/en-us/development/development-environment-setup.json
+++ b/en-us/development/development-environment-setup.json
@@ -1,6 +1,6 @@
{
"filename": "development-environment-setup.md",
- "__html": "<h2>Development Environment
Setup</h2>\n<h4>Preparation</h4>\n<ol>\n<li>\n<p>First, fork the <a
href=\"https://github.com/apache/dolphinscheduler\">dolphinscheduler</a> code
from the remote repository to your local
repository.</p>\n</li>\n<li>\n<p>Install MySQL/PostgreSQL, JDK and MAVEN in
your own software development environment.</p>\n</li>\n<li>\n<p>Clone your
forked repository to the local file system.</p>\n</li>\n</ol>\n<pre><code>
git clone https://github.com/apache [...]
+ "__html": "<h2>Development Environment
Setup</h2>\n<h4>Preparation</h4>\n<ol>\n<li>\n<p>First, fork the <a
href=\"https://github.com/apache/dolphinscheduler\">dolphinscheduler</a> code
from the remote repository to your local
repository.</p>\n</li>\n<li>\n<p>Install MySQL/PostgreSQL, JDK and MAVEN in
your own software development environment.</p>\n</li>\n<li>\n<p>Clone your
forked repository to the local file system.</p>\n</li>\n</ol>\n<pre><code
class=\"language-bash\">git <span class [...]
"link": "/dist/en-us/development/development-environment-setup.html",
"meta": {}
}
\ No newline at end of file
diff --git a/en-us/development/frontend-development.html
b/en-us/development/frontend-development.html
index facbe23..b2f1766 100644
--- a/en-us/development/frontend-development.html
+++ b/en-us/development/frontend-development.html
@@ -10,7 +10,7 @@
<link rel="stylesheet" href="/build/vendor.57fae06.css">
</head>
<body>
- <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/en-us/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">中</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant- [...]
+ <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/en-us/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">中</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant- [...]
<h3>Technical selection</h3>
<pre><code>Vue mvvm framework
@@ -30,7 +30,7 @@ Lodash high performance JavaScript utility library
<h4>Node installation</h4>
</li>
</ul>
-<p>Node package download (note version 8.9.4)
<code>https://nodejs.org/download/release/v8.9.4/</code></p>
+<p>Node package download (note version v12.20.2)
<code>https://nodejs.org/download/release/v12.20.2/</code></p>
<ul>
<li>
<h4>Front-end project construction</h4>
@@ -38,34 +38,26 @@ Lodash high performance JavaScript utility library
</ul>
<p>Use the command line mode <code>cd</code> enter the
<code>dolphinscheduler-ui</code> project directory and execute <code>npm
install</code> to pull the project dependency package.</p>
<blockquote>
-<p>If <code>npm install</code> is very slow</p>
-</blockquote>
-<blockquote>
-<p>You can enter the Taobao image command line to enter <code>npm install -g
cnpm --registry=https://registry.npm.taobao.org</code></p>
-</blockquote>
-<blockquote>
-<p>Run <code>cnpm install</code></p>
+<p>If <code>npm install</code> is very slow, you can set the taobao mirror</p>
</blockquote>
+<pre><code>npm config set registry http://registry.npm.taobao.org/
+</code></pre>
<ul>
-<li>Create a new <code>.env</code> file or the interface that interacts with
the backend</li>
+<li>Modify <code>API_BASE</code> in the file
<code>dolphinscheduler-ui/.env</code> to interact with the backend:</li>
</ul>
-<p>Create a new<code>.env</code> file in the
<code>dolphinscheduler-ui</code>directory, add the ip address and port of the
backend service to the file, and use it to interact with the backend. The
contents of the<code>.env</code> file are as follows:</p>
-<pre><code># Proxy interface address (modified by yourself)
-API_BASE = http://192.168.xx.xx:12345
-
-# If you need to access the project with ip, you can remove the "#"
(example)
-#DEV_HOST = 192.168.xx.xx
+<pre><code># back end interface address
+API_BASE = http://127.0.0.1:12345
</code></pre>
<blockquote>
<h5>! ! ! Special attention here. If the project reports a "node-sass
error" error while pulling the dependency package, execute the following
command again after execution.</h5>
</blockquote>
-<pre><code>npm install node-sass --unsafe-perm //Install node-sass dependency
separately
+<pre><code class="language-bash">npm install node-sass --unsafe-perm <span
class="hljs-comment">#Install node-sass dependency separately</span>
</code></pre>
<ul>
<li>
<h4>Development environment operation</h4>
</li>
-<li><code>npm start</code> project development environment (after startup
address <a href="http://localhost:8888/#/">http://localhost:8888/#/</a>)</li>
+<li><code>npm start</code> project development environment (after startup
address <a href="http://localhost:8888">http://localhost:8888</a>)</li>
</ul>
<h4>Front-end project release</h4>
<ul>
@@ -73,7 +65,7 @@ API_BASE = http://192.168.xx.xx:12345
</ul>
<p>Run the <code>npm run build</code> command to generate a package file
(dist) package</p>
<p>Copy it to the corresponding directory of the server (front-end service
static page storage directory)</p>
-<p>Visit address<code>http://localhost:8888/#/</code></p>
+<p>Visit address<code>http://localhost:8888</code></p>
<h4>Start with node and daemon under Linux</h4>
<p>Install pm2 <code>npm install -g pm2</code></p>
<p>Execute <code>pm2 start npm -- run dev</code> to start the project in the
project <code>dolphinscheduler-ui</code>root directory</p>
@@ -145,9 +137,6 @@ API_BASE = http://192.168.xx.xx:12345
| udf Management
- Resource Management
- Function management
-
-
-
</code></pre>
<p>Data Source Management =>
<code>http://localhost:8888/#/datasource/list</code></p>
<p>Security Center =>
<code>http://localhost:8888/#/security/tenant</code></p>
@@ -174,12 +163,12 @@ actions => mapActions =>
Details:https://vuex.vuejs.org/zh/guide/actions
getters => mapGetters =>
Details:https://vuex.vuejs.org/zh/guide/getters.html
index => entrance
+
mutations => mapMutations =>
Details:https://vuex.vuejs.org/zh/guide/mutations.html
state => mapState => Details:https://vuex.vuejs.org/zh/guide/state.html
Specific action:https://vuex.vuejs.org/zh/
-
</code></pre>
<h2>specification</h2>
<h2>Vue specification</h2>
@@ -205,7 +194,8 @@ export default {
└── util.js
</code></pre>
<h5>3.Prop</h5>
-<p>When you define Prop, you should always name it in camel format (camelCase)
and use the connection line (-) when assigning values to the parent
component.This follows the characteristics of each language, because it is
case-insensitive in HTML tags, and the use of links is more friendly; in
JavaScript, the more natural is the hump name.</p>
+<p>When you define Prop, you should always name it in camel format (camelCase)
and use the connection line (-) when assigning values to the parent component.
+This follows the characteristics of each language, because it is
case-insensitive in HTML tags, and the use of links is more friendly; in
JavaScript, the more natural is the hump name.</p>
<pre><code>// Vue
props: {
articleStatus: Boolean
@@ -525,7 +515,7 @@ Interface parameter transfer needs to be changed to the
following way</p>
<script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
<script>window.rootPath = '';</script>
<script src="/build/vendor.d55c00d.js"></script>
- <script src="/build/development.md.ca64247.js"></script>
+ <script src="/build/development.md.f1da5e0.js"></script>
<script>
var _hmt = _hmt || [];
(function() {
diff --git a/en-us/development/frontend-development.json
b/en-us/development/frontend-development.json
index 123efa7..0b4c3a3 100644
--- a/en-us/development/frontend-development.json
+++ b/en-us/development/frontend-development.json
@@ -1,6 +1,6 @@
{
"filename": "frontend-development.md",
- "__html": "<h1>Front-end development documentation</h1>\n<h3>Technical
selection</h3>\n<pre><code>Vue mvvm framework\n\nEs6 ECMAScript 6.0\n\nAns-ui
Analysys-ui\n\nD3 Visual Library Chart Library\n\nJsplumb connection plugin
library\n\nLodash high performance JavaScript utility
library\n</code></pre>\n<h3>Development environment</h3>\n<ul>\n<li>\n<h4>Node
installation</h4>\n</li>\n</ul>\n<p>Node package download (note version 8.9.4)
<code>https://nodejs.org/download/release/v8.9.4/</c [...]
+ "__html": "<h1>Front-end development documentation</h1>\n<h3>Technical
selection</h3>\n<pre><code>Vue mvvm framework\n\nEs6 ECMAScript 6.0\n\nAns-ui
Analysys-ui\n\nD3 Visual Library Chart Library\n\nJsplumb connection plugin
library\n\nLodash high performance JavaScript utility
library\n</code></pre>\n<h3>Development environment</h3>\n<ul>\n<li>\n<h4>Node
installation</h4>\n</li>\n</ul>\n<p>Node package download (note version
v12.20.2) <code>https://nodejs.org/download/release/v12.20. [...]
"link": "/dist/en-us/development/frontend-development.html",
"meta": {}
}
\ No newline at end of file
diff --git a/en-us/development/plugin-development.html
b/en-us/development/plugin-development.html
index 90a5e0a..dee85a6 100644
--- a/en-us/development/plugin-development.html
+++ b/en-us/development/plugin-development.html
@@ -10,7 +10,7 @@
<link rel="stylesheet" href="/build/vendor.57fae06.css">
</head>
<body>
- <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/en-us/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">中</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant- [...]
+ <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/en-us/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">中</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant- [...]
<p>Remind:Currently, task plugin development does not support hot
deployment.</p>
<h3>Shell-based tasks</h3>
<h4>YARN-based calculations (see MapReduceTask)</h4>
@@ -69,7 +69,7 @@
<script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
<script>window.rootPath = '';</script>
<script src="/build/vendor.d55c00d.js"></script>
- <script src="/build/development.md.ca64247.js"></script>
+ <script src="/build/development.md.f1da5e0.js"></script>
<script>
var _hmt = _hmt || [];
(function() {
diff --git a/zh-cn/development/architecture-design.html
b/zh-cn/development/architecture-design.html
index 72b69b8..028ada2 100644
--- a/zh-cn/development/architecture-design.html
+++ b/zh-cn/development/architecture-design.html
@@ -10,7 +10,7 @@
<link rel="stylesheet" href="/build/vendor.57fae06.css">
</head>
<body>
- <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/zh-cn/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">En</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant [...]
+ <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/zh-cn/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">En</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant [...]
<p>在对调度系统架构说明之前,我们先来认识一下调度系统常用的名词</p>
<h3>1.名词解释</h3>
<p><strong>DAG:</strong> 全称Directed Acyclic
Graph,简称DAG。工作流中的Task任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。举例如下图:</p>
@@ -304,7 +304,7 @@ ZooKeeper Master容错完成之后则重新由DolphinScheduler中Scheduler线程
<script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
<script>window.rootPath = '';</script>
<script src="/build/vendor.d55c00d.js"></script>
- <script src="/build/development.md.ca64247.js"></script>
+ <script src="/build/development.md.f1da5e0.js"></script>
<script>
var _hmt = _hmt || [];
(function() {
diff --git a/zh-cn/development/backend-development.html
b/zh-cn/development/backend-development.html
index 5470312..88eadf2 100644
--- a/zh-cn/development/backend-development.html
+++ b/zh-cn/development/backend-development.html
@@ -10,13 +10,13 @@
<link rel="stylesheet" href="/build/vendor.57fae06.css">
</head>
<body>
- <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/zh-cn/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">En</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant [...]
+ <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/zh-cn/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">En</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant [...]
<h2>环境要求</h2>
<ul>
-<li>MySQL (5.5+) : 必装</li>
-<li><a
href="https://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK</a>
(1.8+) : 必装</li>
-<li>ZooKeeper(3.4.6+) :必装</li>
-<li><a href="http://maven.apache.org/download.cgi">Maven</a>(3.3+) :必装</li>
+<li>MySQL (5.5+) : 必装</li>
+<li><a
href="https://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK</a>
(1.8+) : 必装</li>
+<li>ZooKeeper(3.4.6+) : 必装</li>
+<li><a href="http://maven.apache.org/download.cgi">Maven</a>(3.3+) : 必装</li>
</ul>
<p>因DolphinScheduler中dolphinscheduler-rpc模块使用到Grpc,需要用到Maven编译生成所需要的类
对maven不熟的伙伴请参考: <a
href="http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html">maven
in five minutes</a>(3.3+)</p>
@@ -36,12 +36,12 @@
<li>查看目录</li>
</ul>
<p>正常编译完后,会在当前目录生成
<code>./dolphinscheduler-dist/target/apache-dolphinscheduler-{version}-bin.tar.gz</code>,解压该gz包得到以下目录:</p>
-<pre><code> bin
- conf
- lib
- script
- sql
- install.sh
+<pre><code>bin
+conf
+lib
+script
+sql
+install.sh
</code></pre>
<ul>
<li>说明</li>
@@ -58,7 +58,7 @@ install.sh : 一键部署脚本
<script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
<script>window.rootPath = '';</script>
<script src="/build/vendor.d55c00d.js"></script>
- <script src="/build/development.md.ca64247.js"></script>
+ <script src="/build/development.md.f1da5e0.js"></script>
<script>
var _hmt = _hmt || [];
(function() {
diff --git a/zh-cn/development/backend-development.json
b/zh-cn/development/backend-development.json
index bc6bbcd..2c5ba67 100644
--- a/zh-cn/development/backend-development.json
+++ b/zh-cn/development/backend-development.json
@@ -1,6 +1,6 @@
{
"filename": "backend-development.md",
- "__html": "<h1>后端开发文档</h1>\n<h2>环境要求</h2>\n<ul>\n<li>MySQL (5.5+) :
必装</li>\n<li><a
href=\"https://www.oracle.com/technetwork/java/javase/downloads/index.html\">JDK</a>
(1.8+) : 必装</li>\n<li>ZooKeeper(3.4.6+) :必装</li>\n<li><a
href=\"http://maven.apache.org/download.cgi\">Maven</a>(3.3+)
:必装</li>\n</ul>\n<p>因DolphinScheduler中dolphinscheduler-rpc模块使用到Grpc,需要用到Maven编译生成所需要的类\n对maven不熟的伙伴请参考:
<a
href=\"http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html\">maven
in f [...]
+ "__html": "<h1>后端开发文档</h1>\n<h2>环境要求</h2>\n<ul>\n<li>MySQL (5.5+) :
必装</li>\n<li><a
href=\"https://www.oracle.com/technetwork/java/javase/downloads/index.html\">JDK</a>
(1.8+) : 必装</li>\n<li>ZooKeeper(3.4.6+) : 必装</li>\n<li><a
href=\"http://maven.apache.org/download.cgi\">Maven</a>(3.3+) :
必装</li>\n</ul>\n<p>因DolphinScheduler中dolphinscheduler-rpc模块使用到Grpc,需要用到Maven编译生成所需要的类\n对maven不熟的伙伴请参考:
<a
href=\"http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html\">maven
in f [...]
"link": "/dist/zh-cn/development/backend-development.html",
"meta": {}
}
\ No newline at end of file
diff --git a/zh-cn/development/dev-frontend-development.html
b/zh-cn/development/dev-frontend-development.html
deleted file mode 100644
index 1eb919a..0000000
--- a/zh-cn/development/dev-frontend-development.html
+++ /dev/null
@@ -1,640 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0,
maximum-scale=1.0, user-scalable=no">
- <meta name="keywords" content="dev-frontend-development">
- <meta name="description" content="dev-frontend-development">
- <title>dev-frontend-development</title>
- <link rel="shortcut icon" href="/img/favicon.ico">
- <link rel="stylesheet" href="/build/vendor.57fae06.css">
-</head>
-<body>
- <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/zh-cn/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">En</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant [...]
-<h3>技术选型</h3>
-<pre><code>Vue mvvm框架
-
-Es6 ECMAScript 6.0
-
-Element-ui
-
-form-create JSON表单生成器
-
-D3 可视化库图表库
-
-Jsplumb 连线插件库
-
-Lodash 高性能的 JavaScript 实用工具库
-</code></pre>
-<h3>开发环境搭建</h3>
-<ul>
-<li>
-<h4>Node安装</h4>
-</li>
-</ul>
-<p>Node包下载 (注意:node版本必须是长期版本,目前Node最高版本支持14+)
<code>https://nodejs.org/zh-cn/</code>
-node.js扩展,可以安装nvm管理node版本,安装nrm管理镜像源</p>
-<ul>
-<li>
-<h4>前端项目构建</h4>
-</li>
-</ul>
-<p>用命令行模式 <code>cd</code> 进入
<code>dolphinscheduler-ui</code>项目目录,查看npm镜像源使用状态<code>npm get
registry</code>,如果不是淘宝镜像,将镜像设置成淘宝镜像<code>npm config set registry
http://registry.npm.taobao.org</code>,然后执行 <code>npm install</code> 拉取项目依赖包</p>
-<ul>
-<li>配置<code>.env</code>文件,用于跟后端交互的接口</li>
-</ul>
-<p>在<code>dolphinscheduler-ui</code>目录下打开<code>.env</code>文件,在文件里添加后端服务的ip地址和端口,用于跟后端交互,<code>.env</code>文件内容如下:</p>
-<pre><code># 代理的接口地址(自行修改)
-API_BASE =
http://192.168.xx.xx:12345(注意:API接口一定要写成IP地址的形式,不要写成http://localhost:12345)
-
-# 如果您需要用ip访问项目可以把 "#" 号去掉(例)
-#DEV_HOST = 192.168.xx.xx
-</code></pre>
-<blockquote>
-<h5>!!!这里特别注意 项目如果在拉取依赖包的过程中报 " node-sass error "
错误,请在执行完后再次执行以下命令</h5>
-</blockquote>
-<pre><code>npm install node-sass --unsafe-perm //单独安装node-sass依赖
-</code></pre>
-<ul>
-<li>
-<h4>开发环境运行</h4>
-</li>
-<li><code>npm start</code> 项目开发环境 (启动后访问地址 <a
href="http://localhost:8888/#/">http://localhost:8888/#/</a>)</li>
-</ul>
-<h4>前端项目发布</h4>
-<ul>
-<li><code>npm run build</code> 项目打包 (打包后根目录会创建一个名为dist文件夹,用于发布线上Nginx)</li>
-</ul>
-<p>运行 <code>npm run build</code> 命令,生成打包文件(dist)包</p>
-<p>再拷贝到服务器对应的目录下(前端服务静态页面存放目录)</p>
-<p>访问地址 <code>http://localhost:8888/#/</code></p>
-<h4>Linux下使用node启动并且守护进程</h4>
-<p>安装pm2 <code>npm install -g pm2</code></p>
-<p>在项目<code>dolphinscheduler-ui</code>根目录执行 <code>pm2 start npm -- run
dev</code> 启动项目</p>
-<h4>命令</h4>
-<ul>
-<li>
-<p>启用 <code>pm2 start npm -- run dev</code></p>
-</li>
-<li>
-<p>停止 <code>pm2 stop npm</code></p>
-</li>
-<li>
-<p>删除 <code>pm2 delete npm</code></p>
-</li>
-<li>
-<p>状态 <code>pm2 list</code></p>
-</li>
-</ul>
-<pre><code>
-[root@localhost dolphinscheduler-ui]# pm2 start npm -- run dev
-[PM2] Applying action restartProcessId on app [npm](ids: 0)
-[PM2] [npm](0) ✓
-[PM2] Process successfully started
-┌──────────┬────┬─────────┬──────┬──────┬────────┬─────────┬────────┬─────┬──────────┬──────┬──────────┐
-│ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │
mem │ user │ watching │
-├──────────┼────┼─────────┼──────┼──────┼────────┼─────────┼────────┼─────┼──────────┼──────┼──────────┤
-│ npm │ 0 │ N/A │ fork │ 6168 │ online │ 31 │ 0s │ 0% │
5.6 MB │ root │ disabled │
-└──────────┴────┴─────────┴──────┴──────┴────────┴─────────┴────────┴─────┴──────────┴──────┴──────────┘
- Use `pm2 show <id|name>` to get more details about an app
-
-</code></pre>
-<h3>项目目录结构</h3>
-<p><code>build</code> 打包及开发环境项目的一些webpack配置</p>
-<p><code>node_modules</code> 开发环境node依赖包</p>
-<p><code>src</code> 项目所需文件</p>
-<p><code>src => images</code> 公共图片存放</p>
-<p><code>src => js</code> js/vue</p>
-<p><code>src => lib</code> 公司内部组件(公司组件库开源后可删掉)</p>
-<p><code>src => sass</code> sass文件 一个页面对应一个sass文件</p>
-<p><code>src => view</code> 页面文件 一个页面对应一个html文件</p>
-<pre><code>> 项目采用vue单页面应用(SPA)开发
-- 所有页面入口文件在 `src/js/conf/${对应页面文件名 => home}` 的 `index.js` 入口文件
-- 对应的sass文件则在 `src/sass/conf/${对应页面文件名 => home}/index.scss`
-- 对应的html文件则在 `src/view/${对应页面文件名 => home}/index.html`
-</code></pre>
-<p>公共模块及util <code>src/js/module</code></p>
-<p><code>components</code> => 内部项目公共组件</p>
-<p><code>download</code> => 下载组件</p>
-<p><code>echarts</code> => 图表组件</p>
-<p><code>filter</code> => 过滤器和vue管道</p>
-<p><code>i18n</code> => 国际化</p>
-<p><code>io</code> => io请求封装 基于axios</p>
-<p><code>mixin</code> => vue mixin 公共部分 用于disabled操作</p>
-<p><code>permissions</code> => 权限操作</p>
-<p><code>util</code> => 工具</p>
-<h3>系统功能模块</h3>
-<p>首页 => <code>http://localhost:8888/#/home</code></p>
-<p>项目管理 => <code>http://localhost:8888/#/projects/list</code></p>
-<pre><code>| 项目首页
-| 工作流关系
-| 工作流
- - 工作流定义
- - 工作流实例
- - 任务实例
-</code></pre>
-<p>资源中心 => <code>http://localhost:8888/#/resource/file</code></p>
-<pre><code>| 文件管理
-| UDF管理
- - 资源管理
- - 函数管理
-</code></pre>
-<p>数据源中心 => <code>http://localhost:8888/#/datasource/list</code></p>
-<p>监控中心 => <code>http://localhost:8888/#/monitor/servers/master</code></p>
-<pre><code>| 服务管理
- - Master
- - Worker
- - Zookeeper
- - DB
-| 统计管理
- - Statistics
-</code></pre>
-<p>安全中心 => <code>http://localhost:8888/#/security/tenant</code></p>
-<pre><code>| 租户管理
-| 用户管理
-| 告警组管理
-| 告警实例管理
-| Worker分组管理
-| Yarn队列管理
-| 令牌管理
-</code></pre>
-<p>用户中心 => <code>http://localhost:8888/#/user/account</code></p>
-<h2>路由和状态管理</h2>
-<p>项目 <code>src/js/conf/home</code> 下分为</p>
-<p><code>pages</code> => 路由指向页面目录</p>
-<pre><code> 路由地址对应的页面文件
-</code></pre>
-<p><code>router</code> => 路由管理</p>
-<pre><code>vue的路由器,在每个页面的入口文件index.js 都会注册进来 具体操作:https://router.vuejs.org/zh/
-</code></pre>
-<p><code>store</code> => 状态管理</p>
-<pre><code>每个路由对应的页面都有一个状态管理的文件 分为:
-
-actions => mapActions => 详情:https://vuex.vuejs.org/zh/guide/actions.html
-
-getters => mapGetters => 详情:https://vuex.vuejs.org/zh/guide/getters.html
-
-index => 入口
-
-mutations => mapMutations =>
详情:https://vuex.vuejs.org/zh/guide/mutations.html
-
-state => mapState => 详情:https://vuex.vuejs.org/zh/guide/state.html
-
-具体操作:https://vuex.vuejs.org/zh/
-
-</code></pre>
-<h2>菜单添加</h2>
-<p>公共的菜单只需要在 <code>/src/js/conf/home/router/index.js</code> 中添加就可以了,如:首页</p>
-<pre><code> {
- path: '/home',
- name: 'home',
- component: resolve => require(['../pages/home/index'], resolve),
- meta: {
- title: `${i18n.$t('Home')} - DolphinScheduler`,
- refresh_in_switched_tab: true
- }
- }
-</code></pre>
-<h2>异常处理</h2>
-<p>在 <code>/src/js/module/io/index.js</code> 文件中对所有的 request请求进行拦截, 通过response
拦截器对接口返回的状态码进行分析与异常处理,代码如下</p>
-<pre><code>import io from '@/module/axios/index'
-import cookies from 'js-cookie'
-
-const apiPrefix = '/dolphinscheduler'
-const reSlashPrefix = /^\/+/
-
-const resolveURL = (url) => {
- if (url.indexOf('http') !== -1) {
- return url
- }
- if (url.charAt(0) !== '/') {
- return `${apiPrefix}/${url.replace(reSlashPrefix, '')}`
- }
-
- return url
-}
-
-/**
- * Resolve backend api url
- */
-export { resolveURL }
-
-/**
- * Set io default instance resolveUrl globally
- */
-io.config.resolveURL = resolveURL
-io.config.timeout = 0
-io.config.maxContentLength = 200000
-io.config.validateStatus = function (status) {
- if (status === 401 || status === 504) {
- window.location.href = `${PUBLIC_PATH}/view/login/index.html`
- return
- }
- return status
-}
-
-// io.config.emulateJSON = false
-const _propRequest = io.request
-
-// Add a local request interceptor
-io.request = (spec) => {
- return _propRequest.call(io, spec)
-}
-
-// Global response interceptor registion
-io.interceptors.response.use(
- response => {
- return response
- }, error => {
- // Do something with response error
- return Promise.reject(error)
- }
-)
-
-// Global request interceptor registion
-io.interceptors.request.use(
- config => {
- const sIdCookie = cookies.get('sessionId')
- const sessionId = sessionStorage.getItem('sessionId')
- const requstUrl = config.url.substring(config.url.lastIndexOf('/') + 1)
- if ((!sIdCookie || (sessionId && sessionId !== sIdCookie))
&& requstUrl !== 'login') {
- window.location.href = `${PUBLIC_PATH}/view/login/index.html`
- } else {
- const { method } = config
- if (method === 'get') {
- config.params = Object.assign({}, config.params, {
- _t: Math.random()
- })
- }
- config.headers = config.headers || {}
- const language = cookies.get('language')
- if (language) config.headers.language = language
- if (sIdCookie) config.headers.sessionId = sIdCookie
- return config
- }
- }, error => {
- // Do something with request error
- return Promise.reject(error)
- }
-)
-
-export default io
-</code></pre>
-<h2>规范</h2>
-<h2>Vue规范</h2>
-<h5>1.组件名</h5>
-<p>组件名为多个单词,并且用连接线(-)连接,避免与 HTML 标签冲突,并且结构更加清晰。</p>
-<pre><code>// 正例
-export default {
- name: 'page-article-item'
-}
-</code></pre>
-<h5>2.组件文件</h5>
-<p><code>src/js/module/components</code>项目内部公共组件书写文件夹名与文件名同名,公共组件内部所拆分的子组件与util工具都放置组件内部
<code>_source</code>文件夹里。</p>
-<pre><code>└── components
- ├── header
- ├── header.vue
- └── _source
- └── nav.vue
- └── util.js
- ├── conditions
- ├── conditions.vue
- └── _source
- └── search.vue
- └── util.js
-</code></pre>
-<h5>3.Prop</h5>
-<p>定义 Prop 的时候应该始终以驼峰格式(camelCase)命名,在父组件赋值的时候使用连接线(-)。
-这里遵循每个语言的特性,因为在 HTML 标记中对大小写是不敏感的,使用连接线更加友好;而在 JavaScript 中更自然的是驼峰命名。</p>
-<pre><code>// Vue
-props: {
- articleStatus: Boolean
-}
-// HTML
-<article-item :article-status="true"></article-item>
-</code></pre>
-<p>Prop 的定义应该尽量详细的指定其类型、默认值和验证。</p>
-<p>示例:</p>
-<pre><code>props: {
- attrM: Number,
- attrA: {
- type: String,
- required: true
- },
- attrZ: {
- type: Object,
- // 数组/对象的默认值应该由一个工厂函数返回
- default: function () {
- return {
- msg: '成就你我'
- }
- }
- },
- attrE: {
- type: String,
- validator: function (v) {
- return !(['success', 'fail'].indexOf(v) === -1)
- }
- }
-}
-</code></pre>
-<h5>4.v-for</h5>
-<p>在执行 v-for 遍历的时候,总是应该带上 key 值使更新 DOM 时渲染效率更高。</p>
-<pre><code><ul>
- <li v-for="item in list" :key="item.id">
- {{ item.title }}
- </li>
-</ul>
-</code></pre>
-<p>v-for 应该避免与 v-if 在同一个元素(<code>例如:<li></code>)上使用,因为 v-for 的优先级比 v-if
更高,为了避免无效计算和渲染,应该尽量将 v-if 放到容器的父元素之上。</p>
-<pre><code><ul v-if="showList">
- <li v-for="item in list" :key="item.id">
- {{ item.title }}
- </li>
-</ul>
-</code></pre>
-<h5>5.v-if / v-else-if / v-else</h5>
-<p>若同一组 v-if 逻辑控制中的元素逻辑相同,Vue
为了更高效的元素切换,会复用相同的部分,<code>例如:value</code>。为了避免复用带来的不合理效果,应该在同种元素上加上 key 做标识。</p>
-<pre><code><div v-if="hasData" key="mazey-data">
- <span>{{ mazeyData }}</span>
-</div>
-<div v-else key="mazey-none">
- <span>无数据</span>
-</div>
-</code></pre>
-<h5>6.指令缩写</h5>
-<p>为了统一规范始终使用指令缩写,使用<code>v-bind</code>,<code>v-on</code>并没有什么不好,这里仅为了统一规范。</p>
-<pre><code><input :value="mazeyUser"
@click="verifyUser">
-</code></pre>
-<h5>7.单文件组件的顶级元素顺序</h5>
-<p>样式后续都是打包在一个文件里,所有在单个vue文件中定义的样式,在别的文件里同类名的样式也是会生效的所有在创建一个组件前都会有个顶级类名
-注意:项目内已经增加了sass插件,单个vue文件里可以直接书写sass语法
-为了统一和便于阅读,应该按
<code><template></code>、<code><script></code>、<code><style></code>的顺序放置。</p>
-<pre><code><template>
- <div class="test-model">
- test
- </div>
-</template>
-<script>
- export default {
- name: "test",
- data() {
- return {}
- },
- props: {},
- methods: {},
- watch: {},
- beforeCreate() {
- },
- created() {
- },
- beforeMount() {
- },
- mounted() {
- },
- beforeUpdate() {
- },
- updated() {
- },
- beforeDestroy() {
- },
- destroyed() {
- },
- computed: {},
- components: {},
- }
-</script>
-
-<style lang="scss" rel="stylesheet/scss">
- .test-model {
-
- }
-</style>
-
-</code></pre>
-<h2>JavaScript规范</h2>
-<h5>1.var / let / const</h5>
-<p>建议不再使用 var,而使用 let / const,优先使用 const。任何一个变量的使用都要提前申明,除了 function
定义的函数可以随便放在任何位置。</p>
-<h5>2.引号</h5>
-<pre><code>const foo = '后除'
-const bar = `${foo},前端工程师`
-</code></pre>
-<h5>3.函数</h5>
-<p>匿名函数统一使用箭头函数,多个参数/返回值时优先使用对象的结构赋值。</p>
-<pre><code>function getPersonInfo ({name, sex}) {
- // ...
- return {name, gender}
-}
-</code></pre>
-<p>函数名统一使用驼峰命名,以大写字母开头申明的都是构造函数,使用小写字母开头的都是普通函数,也不该使用 new 操作符去操作普通函数。</p>
-<h5>4.对象</h5>
-<pre><code>const foo = {a: 0, b: 1}
-const bar = JSON.parse(JSON.stringify(foo))
-
-const foo = {a: 0, b: 1}
-const bar = {...foo, c: 2}
-
-const foo = {a: 3}
-Object.assign(foo, {b: 4})
-
-const myMap = new Map([])
-for (let [key, value] of myMap.entries()) {
- // ...
-}
-</code></pre>
-<h5>5.模块</h5>
-<p>统一使用 import / export 的方式管理项目的模块。</p>
-<pre><code>// lib.js
-export default {}
-
-// app.js
-import app from './lib'
-</code></pre>
-<p>import 统一放在文件顶部。</p>
-<p>如果模块只有一个输出值,使用 <code>export default</code>,否则不用。</p>
-<h2>HTML / CSS</h2>
-<h6>1.标签</h6>
-<p>在引用外部 CSS 或 JavaScript 时不写 type 属性。HTML5 默认 type 为 <code>text/css</code> 和
<code>text/javascript</code> 属性,所以没必要指定。</p>
-<pre><code><link rel="stylesheet"
href="//www.test.com/css/test.css">
-<script src="//www.test.com/js/test.js"></script>
-</code></pre>
-<h5>2.命名</h5>
-<p>Class 和 ID 的命名应该语义化,通过看名字就知道是干嘛的;多个单词用连接线 - 连接。</p>
-<pre><code>// 正例
-.test-header{
- font-size: 20px;
-}
-</code></pre>
-<h5>3.属性缩写</h5>
-<p>CSS 属性尽量使用缩写,提高代码的效率和方便理解。</p>
-<pre><code>// 反例
-border-width: 1px;
-border-style: solid;
-border-color: #ccc;
-
-// 正例
-border: 1px solid #ccc;
-</code></pre>
-<h5>4.文档类型</h5>
-<p>应该总是使用 HTML5 标准。</p>
-<pre><code><!DOCTYPE html>
-</code></pre>
-<h5>5.注释</h5>
-<p>应该给一个模块文件写一个区块注释。</p>
-<pre><code>/**
-* @module mazey/api
-* @author Mazey <[email protected]>
-* @description test.
-* */
-</code></pre>
-<h2>接口</h2>
-<h5>所有的接口都以 Promise 形式返回</h5>
-<p>注意非0都为错误走catch</p>
-<pre><code>const test = () => {
- return new Promise((resolve, reject) => {
- resolve({
- a:1
- })
- })
-}
-
-// 调用
-test.then(res => {
- console.log(res)
- // {a:1}
-})
-</code></pre>
-<p>正常返回</p>
-<pre><code>{
- code:0,
- data:{}
- msg:'成功'
-}
-</code></pre>
-<p>错误返回</p>
-<pre><code>{
- code:10000,
- data:{}
- msg:'失败'
-}
-</code></pre>
-<p>接口如果是post请求,Content-Type默认为application/x-www-form-urlencoded;如果Content-Type改成application/json,
-接口传参需要改成下面的方式</p>
-<pre><code>io.post('url', payload, null, null, { emulateJSON: false } res
=> {
- resolve(res)
-}).catch(e => {
- reject(e)
-})
-</code></pre>
-<h5>相关接口路径</h5>
-<p>dag 相关接口 <code>src/js/conf/home/store/dag/actions.js</code></p>
-<p>数据源中心 相关接口 <code>src/js/conf/home/store/datasource/actions.js</code></p>
-<p>项目管理 相关接口 <code>src/js/conf/home/store/projects/actions.js</code></p>
-<p>资源中心 相关接口 <code>src/js/conf/home/store/resource/actions.js</code></p>
-<p>监控中心 相关接口 <code>src/js/conf/home/store/monitor/actions.js</code></p>
-<p>安全中心 相关接口 <code>src/js/conf/home/store/security/actions.js</code></p>
-<p>用户中心 相关接口 <code>src/js/conf/home/store/user/actions.js</code></p>
-<h2>扩展开发</h2>
-<h5>1.增加节点</h5>
-<p>(1) 先将节点的icon小图标放置<code>src/js/conf/home/pages/dag/img</code>文件夹内,注意
<code>toolbar_${后台定义的节点的英文名称 例如:SHELL}.png</code>
-(2) 找到 <code>src/js/conf/home/pages/dag/_source/config.js</code> 里的
<code>tasksType</code> 对象,往里增加</p>
-<pre><code>'DEPENDENT': { // 后台定义节点类型英文名称用作key值
- desc: 'DEPENDENT', // tooltip desc
- color: '#2FBFD8' // 代表的颜色主要用于 tree和gantt 两张图
-}
-</code></pre>
-<p>(3) 在 <code>src/js/conf/home/pages/dag/_source/formModel/tasks</code> 增加一个
<code>${节点类型(小写)}</code>.vue 文件,跟当前节点相关的组件内容都在这里写。 属于节点组件内的必须拥有一个函数
<code>_verification()</code> 验证成功后讲当前组件的相关数据往父组件抛。</p>
-<pre><code>/**
- * 验证
-*/
- _verification () {
- // datasource 子组件验证
- if (!this.$refs.refDs._verifDatasource()) {
- return false
- }
-
- // 验证函数
- if (!this.method) {
- this.$message.warning(`${i18n.$t('请输入方法')}`)
- return false
- }
-
- // localParams 子组件验证
- if (!this.$refs.refLocalParams._verifProp()) {
- return false
- }
- // 存储
- this.$emit('on-params', {
- type: this.type,
- datasource: this.datasource,
- method: this.method,
- localParams: this.localParams
- })
- return true
- }
-</code></pre>
-<p>(4)
节点组件内部所用到公共的组件都在<code>_source</code>下,<code>commcon.js</code>用与配置公共数据</p>
-<h5>2.增加状态类型</h5>
-<p>(1) 找到 <code>src/js/conf/home/pages/dag/_source/config.js</code> 里的
<code>tasksState</code> 对象,往里增加</p>
-<pre><code>'WAITTING_DEPEND': { //后端定义状态类型 前端用作key值
- id: 11, // 前端定义id 后续用作排序
- desc: `${i18n.$t('等待依赖')}`, // tooltip desc
- color: '#5101be', // 代表的颜色主要用于 tree和gantt 两张图
- icoUnicode: '&#xe68c;', // 字体图标
- isSpin: false // 是否旋转(需代码判断)
-}
-</code></pre>
-<h5>3.增加操作栏工具</h5>
-<p>(1) 找到 <code>src/js/conf/home/pages/dag/_source/config.js</code> 里的
<code>toolOper</code> 对象,往里增加</p>
-<pre><code>{
- code: 'pointer', // 工具标识
- icon: '&#xe781;', // 工具图标
- disable: disable, // 是否禁用
- desc: `${i18n.$t('拖动节点和选中项')}` // tooltip desc
-}
-</code></pre>
-<p>(2) 工具类都以一个构造函数返回 <code>src/js/conf/home/pages/dag/_source/plugIn</code></p>
-<p><code>downChart.js</code> => dag 图片下载处理</p>
-<p><code>dragZoom.js</code> => 鼠标缩放效果处理</p>
-<p><code>jsPlumbHandle.js</code> => 拖拽线条处理</p>
-<p><code>util.js</code> => 属于 <code>plugIn</code> 工具类</p>
-<p>操作则在 <code>src/js/conf/home/pages/dag/_source/dag.js</code> =>
<code>toolbarEvent</code> 事件中处理。</p>
-<h5>3.增加一个路由页面</h5>
-<p>(1) 首先在路由管理增加一个路由地址<code>src/js/conf/home/router/index.js</code></p>
-<pre><code>{
- path: '/test', // 路由地址
- name: 'test', // 别名
- component: resolve => require(['../pages/test/index'], resolve), //
路由对应组件入口文件
- meta: {
- title: `${i18n.$t('test')} - DolphinScheduler` // title 显示
- }
-},
-</code></pre>
-<p>(2) 在<code>src/js/conf/home/pages</code> 建一个 <code>test</code>
文件夹,在文件夹里建一个<code>index.vue</code>入口文件。</p>
-<pre><code>这样就可以直接访问 `http://localhost:8888/#/test`
-</code></pre>
-<h5>4.增加预置邮箱</h5>
-<p>找到<code>src/lib/localData/email.js</code>启动和定时邮箱地址输入可以自动下拉匹配。</p>
-<pre><code>export default
["[email protected]","[email protected]","[email protected]"]
-</code></pre>
-<h5>5.权限管理及disabled状态处理</h5>
-<p>权限根据后端接口<code>getUserInfo</code>接口给出<code>userType:
"ADMIN_USER/GENERAL_USER"</code>权限控制页面操作按钮是否<code>disabled</code></p>
-<p>具体操作:<code>src/js/module/permissions/index.js</code></p>
-<p>disabled处理:<code>src/js/module/mixin/disabledState.js</code></p>
-</div></section><footer class="footer-container"><div class="footer-body"><img
src="/img/ds_gray.svg"/><div class="cols-container"><div class="col
col-12"></div><div class="col col-6"><dl><dt>文档</dt><dd><a
href="/zh-cn/development/architecture-design.html"
target="_self">概览</a></dd><dd><a
href="/zh-cn/docs/latest/user_doc/quick-start.html"
target="_self">快速开始</a></dd><dd><a
href="/zh-cn/development/backend-development.html"
target="_self">开发者指南</a></dd></dl></div><div class="col col-6">< [...]
- <script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-with-addons.min.js"></script>
- <script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
- <script>window.rootPath = '';</script>
- <script src="/build/vendor.d55c00d.js"></script>
- <script src="/build/development.md.ca64247.js"></script>
- <script>
- var _hmt = _hmt || [];
- (function() {
- var hm = document.createElement("script");
- hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
- var s = document.getElementsByTagName("script")[0];
- s.parentNode.insertBefore(hm, s);
- })();
- </script>
-</body>
-</html>
\ No newline at end of file
diff --git a/zh-cn/development/dev-frontend-development.json
b/zh-cn/development/dev-frontend-development.json
deleted file mode 100644
index 8fdc4af..0000000
--- a/zh-cn/development/dev-frontend-development.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "filename": "dev-frontend-development.md",
- "__html": "<h1>前端开发文档</h1>\n<h3>技术选型</h3>\n<pre><code>Vue mvvm框架\n\nEs6
ECMAScript 6.0\n\nElement-ui\n\nform-create JSON表单生成器\n\nD3 可视化库图表库\n\nJsplumb
连线插件库\n\nLodash 高性能的 JavaScript
实用工具库\n</code></pre>\n<h3>开发环境搭建</h3>\n<ul>\n<li>\n<h4>Node安装</h4>\n</li>\n</ul>\n<p>Node包下载
(注意:node版本必须是长期版本,目前Node最高版本支持14+)
<code>https://nodejs.org/zh-cn/</code>\nnode.js扩展,可以安装nvm管理node版本,安装nrm管理镜像源</p>\n<ul>\n<li>\n<h4>前端项目构建</h4>\n</li>\n</ul>\n<p>用命令行模式
<code>cd</code> 进入 <code>dolphinscheduler-u [...]
- "link": "/dist/zh-cn/development/dev-frontend-development.html",
- "meta": {}
-}
\ No newline at end of file
diff --git a/zh-cn/development/development-environment-setup.html
b/zh-cn/development/development-environment-setup.html
index 97ccfdf..825fb92 100644
--- a/zh-cn/development/development-environment-setup.html
+++ b/zh-cn/development/development-environment-setup.html
@@ -10,7 +10,7 @@
<link rel="stylesheet" href="/build/vendor.57fae06.css">
</head>
<body>
- <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/zh-cn/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">En</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant [...]
+ <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/zh-cn/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">En</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant [...]
<h4>准备工作</h4>
<ol>
<li>
@@ -21,41 +21,58 @@
</li>
<li>
<p>把自己仓库 clone 到本地</p>
-<p><code>git clone https://github.com/apache/dolphinscheduler.git</code></p>
-</li>
-<li>
-<p>git clone 项目后,进入项目目录,执行以下命令。</p>
</li>
</ol>
-<pre><code>1. git branch -a #查看分支
-2. git checkout dev #切换到dev分支
-3. git pull #同步分支
-4. mvn -U clean package -Prelease -Dmaven.test.skip=true
#由于项目使用了gRPC,所以需要先编译项目生成需要的类。
+<pre><code class="language-bash">git <span class="hljs-built_in">clone</span>
https://github.com/apache/dolphinscheduler.git
+</code></pre>
+<ol start="4">
+<li>git clone 项目后,进入项目目录,执行以下命令</li>
+</ol>
+<pre><code class="language-bash">1. git branch -a <span
class="hljs-comment">#查看分支</span>
+2. git checkout dev <span class="hljs-comment">#切换到dev分支</span>
+3. git pull <span class="hljs-comment">#同步分支</span>
+4. mvn -U clean package -Prelease -Dmaven.test.skip=<span
class="hljs-literal">true</span> <span class="hljs-comment">#mvn打包</span>
</code></pre>
<h4>安装node</h4>
<ol>
-<li>安装nvm<br>
-curl -o- <a
href="https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh">https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh</a>
| bash</li>
-<li>刷新环境变量<br>
-source ~/.bash_profile</li>
-<li>安装node<br>
-nvm install v12.12.0<br>
-备注:mac用户还可以通过brew安装npm:brew install npm</li>
-<li>验证node安装成功<br>
-node --version</li>
+<li>
+<p>安装nvm<br>
+curl -o- <a
href="https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh">https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh</a>
| bash</p>
+</li>
+<li>
+<p>刷新环境变量<br>
+source ~/.bash_profile</p>
+</li>
+<li>
+<p>安装node<br>
+nvm install v12.20.2
+备注: Mac用户还可以通过brew安装npm: brew install npm</p>
+</li>
+<li>
+<p>验证node安装成功<br>
+node --version</p>
+</li>
</ol>
<h4>安装 zookeeper</h4>
<ol>
-<li>下载 zookeeper<br>
-<a
href="http://apache.mirrors.hoobly.com/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz">http://apache.mirrors.hoobly.com/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz</a></li>
-<li>复制配置文件<br>
-cp conf/zoo_sample.cfg conf/zoo.cfg</li>
-<li>修改配置<br>
+<li>
+<p>下载 zookeeper<br>
+<a
href="https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz">https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz</a></p>
+</li>
+<li>
+<p>复制配置文件<br>
+cp conf/zoo_sample.cfg conf/zoo.cfg</p>
+</li>
+<li>
+<p>修改配置<br>
vi conf/zoo.cfg<br>
-dataDir=./tmp/zookeeper</li>
-<li>启动/停止 zookeeper<br>
+dataDir=./tmp/zookeeper</p>
+</li>
+<li>
+<p>启动/停止 zookeeper<br>
./bin/zkServer.sh start
-./bin/zkServer.sh stop</li>
+./bin/zkServer.sh stop</p>
+</li>
</ol>
<h4>创建数据库</h4>
<ol>
@@ -65,13 +82,16 @@ dataDir=./tmp/zookeeper</li>
mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'ds_user'@'%'
IDENTIFIED BY 'dolphinscheduler';
mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'ds_user'@'localhost'
IDENTIFIED BY 'dolphinscheduler';
mysql> flush privileges;
-
</code></pre>
<h4>搭建前端</h4>
<ol>
-<li>进入 dolphinscheduler-ui 的目录<br>
-cd dolphinscheduler-ui</li>
-<li>执行 npm install</li>
+<li>
+<p>进入 dolphinscheduler-ui 的目录<br>
+cd dolphinscheduler-ui</p>
+</li>
+<li>
+<p>执行 npm install</p>
+</li>
</ol>
<h4>搭建后端</h4>
<ol>
@@ -81,29 +101,25 @@ file-->open</p>
</li>
<li>
<p>修改 dao 模块 resource 目录下 datasource.properties 文件中的数据库配置信息</p>
-<pre><code> spring.datasource.driver-class-name=com.mysql.jdbc.Driver
- spring.datasource.url=jdbc:mysql://localhost:3306/dolphinscheduler
- spring.datasource.username=ds_user
- spring.datasource.password=dolphinscheduler
-</code></pre>
</li>
+</ol>
+<pre><code>spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8
+spring.datasource.username=ds_user
+spring.datasource.password=dolphinscheduler
+</code></pre>
+<ol start="3">
<li>
<p>修改根项目中 pom.xml,将 mysql-connector-java 依赖的 scope 修改为 compile</p>
</li>
<li>
-<p>刷新 dao 模块,运行
org.apache.dolphinscheduler.dao.upgrade.shell.CreateDolphinScheduler 的main
方法,自动插入项目所需的表和数据</p>
+<p>刷新 dao 模块,运行
org.apache.dolphinscheduler.dao.upgrade.shell.CreateDolphinScheduler 的 main
方法,自动插入项目所需的表和数据</p>
</li>
<li>
-<p>修改 service 模块 zookeeper.properties 中链接信息 (zookeeper.quorum)<br>
+<p>修改 service 模块 zookeeper.properties 中 quorum 配置
zookeeper.quorum=localhost:2181</p>
</li>
-<li>
-<p>修改dolphinscheduler-ui模块的 .env 文件</p>
-</li>
</ol>
-<pre><code>API_BASE = http://localhost:12345
-DEV_HOST = localhost
-</code></pre>
<h4>启动项目</h4>
<ol>
<li>
@@ -111,58 +127,66 @@ DEV_HOST = localhost
./bin/zkServer.sh start</p>
</li>
<li>
-<p>启动 MasterServer,执行 org.apache.dolphinscheduler.server.master.MasterServer 的
main 方法,需要设置 VM Options:</p>
-<pre><code> -Dlogging.config=classpath:logback-master.xml
-Ddruid.mysql.usePingMethod=false
-</code></pre>
+<p>启动 MasterServer,执行 org.apache.dolphinscheduler.server.master.MasterServer 的
main 方法,需要设置 VM Options:</p>
</li>
-<li>
-<p>启动WorkerServer,执行org.apache.dolphinscheduler.server.worker.WorkerServer的main方法,需要设置VM
Options:</p>
-<pre><code> -Dlogging.config=classpath:logback-worker.xml
-Ddruid.mysql.usePingMethod=false
+</ol>
+<pre><code>-Dlogging.config=classpath:logback-master.xml
-Ddruid.mysql.usePingMethod=false
</code></pre>
-</li>
-<li>
-<p>启动 ApiApplicationServer,执行
org.apache.dolphinscheduler.api.ApiApplicationServer 的 main 方法,需要设置 VM
Options:</p>
-<pre><code> -Dlogging.config=classpath:logback-api.xml
-Dspring.profiles.active=api
+<ol start="3">
+<li>启动WorkerServer,执行org.apache.dolphinscheduler.server.worker.WorkerServer的
main方法,需要设置 VM Options:</li>
+</ol>
+<pre><code>-Dlogging.config=classpath:logback-worker.xml
-Ddruid.mysql.usePingMethod=false
</code></pre>
-</li>
-<li>
-<p>,这里暂时不启动其它模块,如果启动其它模块,那么去查询script/dolphinscheduler-daemon.sh文件,设置相应的VM
Options</p>
-<pre><code> if [ "$command" = "api-server" ]; then
- LOG_FILE="-Dlogging.config=classpath:logback-api.xml
-Dspring.profiles.active=api"
- CLASS=org.apache.dolphinscheduler.api.ApiApplicationServer
- elif [ "$command" = "master-server" ]; then
- LOG_FILE="-Dlogging.config=classpath:logback-master.xml
-Ddruid.mysql.usePingMethod=false"
- CLASS=org.apache.dolphinscheduler.server.master.MasterServer
- elif [ "$command" = "worker-server" ]; then
- LOG_FILE="-Dlogging.config=classpath:logback-worker.xml
-Ddruid.mysql.usePingMethod=false"
- CLASS=org.apache.dolphinscheduler.server.worker.WorkerServer
- elif [ "$command" = "alert-server" ]; then
- LOG_FILE="-Dlogback.configurationFile=conf/logback-alert.xml"
- CLASS=org.apache.dolphinscheduler.alert.AlertServer
- elif [ "$command" = "logger-server" ]; then
- CLASS=org.apache.dolphinscheduler.server.log.LoggerServer
- else
- echo "Error: No command named \`$command' was found."
- exit 1
- fi
+<ol start="4">
+<li>启动 ApiApplicationServer,执行
org.apache.dolphinscheduler.api.ApiApplicationServer 的 main 方法,需要设置 VM
Options:</li>
+</ol>
+<pre><code>-Dlogging.config=classpath:logback-api.xml
-Dspring.profiles.active=api
</code></pre>
-</li>
-<li>
-<p>启动前端 ui 模块<br>
-cd dolphinscheduler-ui 目录,执行 npm run start</p>
-</li>
+<ol start="5">
+<li>这里暂时不启动其它模块,如果启动其它模块,那么去查询script/dolphinscheduler-daemon.sh文件,设置相应的 VM
Options</li>
+</ol>
+<pre><code>if [ "$command" = "api-server" ]; then
+ LOG_FILE="-Dlogging.config=classpath:logback-api.xml
-Dspring.profiles.active=api"
+ CLASS=org.apache.dolphinscheduler.api.ApiApplicationServer
+elif [ "$command" = "master-server" ]; then
+ LOG_FILE="-Dlogging.config=classpath:logback-master.xml
-Ddruid.mysql.usePingMethod=false"
+ CLASS=org.apache.dolphinscheduler.server.master.MasterServer
+elif [ "$command" = "worker-server" ]; then
+ LOG_FILE="-Dlogging.config=classpath:logback-worker.xml
-Ddruid.mysql.usePingMethod=false"
+ CLASS=org.apache.dolphinscheduler.server.worker.WorkerServer
+elif [ "$command" = "alert-server" ]; then
+ LOG_FILE="-Dlogback.configurationFile=conf/logback-alert.xml"
+ CLASS=org.apache.dolphinscheduler.alert.AlertServer
+elif [ "$command" = "logger-server" ]; then
+ CLASS=org.apache.dolphinscheduler.server.log.LoggerServer
+else
+ echo "Error: No command named '$command' was found."
+ exit 1
+fi
+</code></pre>
+<ol start="6">
+<li>启动前端 ui 模块</li>
</ol>
+<pre><code class="language-bash"><span class="hljs-built_in">cd</span>
dolphinscheduler-ui
+npm run start
+</code></pre>
<h4>访问项目</h4>
<ol>
-<li>访问 <a
href="http://localhost:12345/dolphinscheduler">http://localhost:12345/dolphinscheduler</a><br>
-输入管理员账户 admin,密码 dolphinscheduler123 进行登陆</li>
+<li>
+<p>访问 <a href="http://localhost:8888">http://localhost:8888</a></p>
+</li>
+<li>
+<p>登录管理员账号<br>
+用户: admin<br>
+密码: dolphinscheduler123</p>
+</li>
</ol>
</div></section><footer class="footer-container"><div class="footer-body"><img
src="/img/ds_gray.svg"/><div class="cols-container"><div class="col
col-12"></div><div class="col col-6"><dl><dt>文档</dt><dd><a
href="/zh-cn/development/architecture-design.html"
target="_self">概览</a></dd><dd><a
href="/zh-cn/docs/latest/user_doc/quick-start.html"
target="_self">快速开始</a></dd><dd><a
href="/zh-cn/development/backend-development.html"
target="_self">开发者指南</a></dd></dl></div><div class="col col-6">< [...]
<script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-with-addons.min.js"></script>
<script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
<script>window.rootPath = '';</script>
<script src="/build/vendor.d55c00d.js"></script>
- <script src="/build/development.md.ca64247.js"></script>
+ <script src="/build/development.md.f1da5e0.js"></script>
<script>
var _hmt = _hmt || [];
(function() {
diff --git a/zh-cn/development/development-environment-setup.json
b/zh-cn/development/development-environment-setup.json
index fdc11dd..c348a3f 100644
--- a/zh-cn/development/development-environment-setup.json
+++ b/zh-cn/development/development-environment-setup.json
@@ -1,6 +1,6 @@
{
"filename": "development-environment-setup.md",
- "__html": "<h2>环境搭建</h2>\n<h4>准备工作</h4>\n<ol>\n<li>\n<p>首先从远端仓库 fork <a
href=\"https://github.com/apache/dolphinscheduler\">dolphinscheduler</a>
一份代码到自己的仓库中</p>\n</li>\n<li>\n<p>在开发环境中安装好
MySQL/PostgreSQL、JDK、MAVEN</p>\n</li>\n<li>\n<p>把自己仓库 clone
到本地</p>\n<p><code>git clone
https://github.com/apache/dolphinscheduler.git</code></p>\n</li>\n<li>\n<p>git
clone 项目后,进入项目目录,执行以下命令。</p>\n</li>\n</ol>\n<pre><code>1. git branch -a
#查看分支\n2. git checkout dev #切换到dev分支\n3. git pull #同步分支\n4. [...]
+ "__html": "<h2>环境搭建</h2>\n<h4>准备工作</h4>\n<ol>\n<li>\n<p>首先从远端仓库 fork <a
href=\"https://github.com/apache/dolphinscheduler\">dolphinscheduler</a>
一份代码到自己的仓库中</p>\n</li>\n<li>\n<p>在开发环境中安装好
MySQL/PostgreSQL、JDK、MAVEN</p>\n</li>\n<li>\n<p>把自己仓库 clone
到本地</p>\n</li>\n</ol>\n<pre><code class=\"language-bash\">git <span
class=\"hljs-built_in\">clone</span>
https://github.com/apache/dolphinscheduler.git\n</code></pre>\n<ol
start=\"4\">\n<li>git clone 项目后,进入项目目录,执行以下命令</li>\n</ol>\n<pre><code [...]
"link": "/dist/zh-cn/development/development-environment-setup.html",
"meta": {}
}
\ No newline at end of file
diff --git a/zh-cn/development/frontend-development.html
b/zh-cn/development/frontend-development.html
index 1f761f1..77d804c 100644
--- a/zh-cn/development/frontend-development.html
+++ b/zh-cn/development/frontend-development.html
@@ -10,9 +10,9 @@
<link rel="stylesheet" href="/build/vendor.57fae06.css">
</head>
<body>
- <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/zh-cn/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">En</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant [...]
+ <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/zh-cn/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">En</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant [...]
<h3>技术选型</h3>
-<pre><code>Vue mvvm框架
+<pre><code>Vue mvvm 框架
Es6 ECMAScript 6.0
@@ -30,7 +30,7 @@ Lodash 高性能的 JavaScript 实用工具库
<h4>Node安装</h4>
</li>
</ul>
-<p>Node包下载 (注意版本 8.9.4)
<code>https://nodejs.org/download/release/v8.9.4/</code></p>
+<p>Node包下载 (注意版本 v12.20.2)
<code>https://nodejs.org/download/release/v12.20.2/</code></p>
<ul>
<li>
<h4>前端项目构建</h4>
@@ -38,34 +38,26 @@ Lodash 高性能的 JavaScript 实用工具库
</ul>
<p>用命令行模式 <code>cd</code> 进入 <code>dolphinscheduler-ui</code>项目目录并执行
<code>npm install</code> 拉取项目依赖包</p>
<blockquote>
-<p>如果 <code>npm install</code> 速度非常慢</p>
-</blockquote>
-<blockquote>
-<p>可以转淘宝镜像命令行输入 <code>npm install -g cnpm
--registry=https://registry.npm.taobao.org</code></p>
-</blockquote>
-<blockquote>
-<p>运行 <code>cnpm install</code></p>
+<p>如果 <code>npm install</code> 速度非常慢,你可以设置淘宝镜像</p>
</blockquote>
+<pre><code>npm config set registry http://registry.npm.taobao.org/
+</code></pre>
<ul>
-<li>新建一个<code>.env</code>文件,用于跟后端交互的接口</li>
+<li>修改 <code>dolphinscheduler-ui/.env</code> 文件中的
<code>API_BASE</code>,用于跟后端交互:</li>
</ul>
-<p>在<code>dolphinscheduler-ui</code>目录下新建一个<code>.env</code>文件,在文件里添加后端服务的ip地址和端口,用于跟后端交互,<code>.env</code>文件内容如下:</p>
<pre><code># 代理的接口地址(自行修改)
-API_BASE = http://192.168.xx.xx:12345
-
-# 如果您需要用ip访问项目可以把 "#" 号去掉(例)
-#DEV_HOST = 192.168.xx.xx
+API_BASE = http://127.0.0.1:12345
</code></pre>
<blockquote>
<h5>!!!这里特别注意 项目如果在拉取依赖包的过程中报 " node-sass error "
错误,请在执行完后再次执行以下命令</h5>
</blockquote>
-<pre><code>npm install node-sass --unsafe-perm //单独安装node-sass依赖
+<pre><code class="language-bash">npm install node-sass --unsafe-perm <span
class="hljs-comment">#单独安装node-sass依赖</span>
</code></pre>
<ul>
<li>
<h4>开发环境运行</h4>
</li>
-<li><code>npm start</code> 项目开发环境 (启动后访问地址 <a
href="http://localhost:8888/#/">http://localhost:8888/#/</a>)</li>
+<li><code>npm start</code> 项目开发环境 (启动后访问地址 <a
href="http://localhost:8888">http://localhost:8888</a>)</li>
</ul>
<h4>前端项目发布</h4>
<ul>
@@ -73,7 +65,7 @@ API_BASE = http://192.168.xx.xx:12345
</ul>
<p>运行 <code>npm run build</code> 命令,生成打包文件(dist)包</p>
<p>再拷贝到服务器对应的目录下(前端服务静态页面存放目录)</p>
-<p>访问地址 <code>http://localhost:8888/#/</code></p>
+<p>访问地址 <code>http://localhost:8888</code></p>
<h4>Linux下使用node启动并且守护进程</h4>
<p>安装pm2 <code>npm install -g pm2</code></p>
<p>在项目<code>dolphinscheduler-ui</code>根目录执行 <code>pm2 start npm -- run
dev</code> 启动项目</p>
@@ -177,7 +169,6 @@ mutations => mapMutations =>
详情:https://vuex.vuejs.org/zh/guide/muta
state => mapState => 详情:https://vuex.vuejs.org/zh/guide/state.html
具体操作:https://vuex.vuejs.org/zh/
-
</code></pre>
<h2>规范</h2>
<h2>Vue规范</h2>
@@ -434,8 +425,8 @@ test.then(res => {
<p>用户中心 相关接口 <code>src/js/conf/home/store/user/actions.js</code></p>
<h2>扩展开发</h2>
<h5>1.增加节点</h5>
-<p>(1) 先将节点的icon小图标放置<code>src/js/conf/home/pages/dag/img</code>文件夹内,注意
<code>toolbar_${后台定义的节点的英文名称 例如:SHELL}.png</code>
-(2) 找到 <code>src/js/conf/home/pages/dag/_source/config.js</code> 里的
<code>tasksType</code> 对象,往里增加</p>
+<p>(1) 先将节点的icon小图标放置<code>src/js/conf/home/pages/dag/img</code>文件夹内,注意
<code>toolbar_${后台定义的节点的英文名称 例如:SHELL}.png</code></p>
+<p>(2) 找到 <code>src/js/conf/home/pages/dag/_source/config.js</code> 里的
<code>tasksType</code> 对象,往里增加</p>
<pre><code>'DEPENDENT': { // 后台定义节点类型英文名称用作key值
desc: 'DEPENDENT', // tooltip desc
color: '#2FBFD8' // 代表的颜色主要用于 tree和gantt 两张图
@@ -524,7 +515,7 @@ test.then(res => {
<script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
<script>window.rootPath = '';</script>
<script src="/build/vendor.d55c00d.js"></script>
- <script src="/build/development.md.ca64247.js"></script>
+ <script src="/build/development.md.f1da5e0.js"></script>
<script>
var _hmt = _hmt || [];
(function() {
diff --git a/zh-cn/development/frontend-development.json
b/zh-cn/development/frontend-development.json
index 63cf199..bacca43 100644
--- a/zh-cn/development/frontend-development.json
+++ b/zh-cn/development/frontend-development.json
@@ -1,6 +1,6 @@
{
"filename": "frontend-development.md",
- "__html": "<h1>前端开发文档</h1>\n<h3>技术选型</h3>\n<pre><code>Vue mvvm框架\n\nEs6
ECMAScript 6.0\n\nAns-ui Analysys-ui\n\nD3 可视化库图表库\n\nJsplumb 连线插件库\n\nLodash
高性能的 JavaScript
实用工具库\n</code></pre>\n<h3>开发环境搭建</h3>\n<ul>\n<li>\n<h4>Node安装</h4>\n</li>\n</ul>\n<p>Node包下载
(注意版本 8.9.4)
<code>https://nodejs.org/download/release/v8.9.4/</code></p>\n<ul>\n<li>\n<h4>前端项目构建</h4>\n</li>\n</ul>\n<p>用命令行模式
<code>cd</code> 进入 <code>dolphinscheduler-ui</code>项目目录并执行 <code>npm
install</code> 拉取项目依赖包</p>\n<bloc [...]
+ "__html": "<h1>前端开发文档</h1>\n<h3>技术选型</h3>\n<pre><code>Vue mvvm 框架\n\nEs6
ECMAScript 6.0\n\nAns-ui Analysys-ui\n\nD3 可视化库图表库\n\nJsplumb 连线插件库\n\nLodash
高性能的 JavaScript
实用工具库\n</code></pre>\n<h3>开发环境搭建</h3>\n<ul>\n<li>\n<h4>Node安装</h4>\n</li>\n</ul>\n<p>Node包下载
(注意版本 v12.20.2)
<code>https://nodejs.org/download/release/v12.20.2/</code></p>\n<ul>\n<li>\n<h4>前端项目构建</h4>\n</li>\n</ul>\n<p>用命令行模式
<code>cd</code> 进入 <code>dolphinscheduler-ui</code>项目目录并执行 <code>npm
install</code> 拉取项目依赖包</p>\ [...]
"link": "/dist/zh-cn/development/frontend-development.html",
"meta": {}
}
\ No newline at end of file
diff --git a/zh-cn/development/plugin-development.html
b/zh-cn/development/plugin-development.html
index 8da350b..c3fcb4c 100644
--- a/zh-cn/development/plugin-development.html
+++ b/zh-cn/development/plugin-development.html
@@ -10,7 +10,7 @@
<link rel="stylesheet" href="/build/vendor.57fae06.css">
</head>
<body>
- <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/zh-cn/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">En</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant [...]
+ <div id="root"><div class="md2html development-page"
data-reactroot=""><header class="header-container header-container-dark"><div
class="header-body"><a href="/zh-cn/index.html"><img class="logo"
src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span
class="icon-search"></span></div><span class="language-switch
language-switch-dark">En</span><div class="header-menu"><img
class="header-menu-toggle" src="/img/system/menu_white.png"/><div><ul
class="ant-menu whiteClass ant [...]
<p>提醒:目前任务插件开发暂不支持热部署</p>
<h3>基于SHELL的任务</h3>
<h4>基于YARN的计算(参见MapReduceTask)</h4>
@@ -69,7 +69,7 @@
<script
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
<script>window.rootPath = '';</script>
<script src="/build/vendor.d55c00d.js"></script>
- <script src="/build/development.md.ca64247.js"></script>
+ <script src="/build/development.md.f1da5e0.js"></script>
<script>
var _hmt = _hmt || [];
(function() {