Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
陈六生
code-server
提交
c6c293d5
C
code-server
项目概览
陈六生
/
code-server
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
code-server
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
c6c293d5
编写于
10月 09, 2020
作者:
A
Asher
提交者:
GitHub
10月 09, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #2147 from cdr/multi-plugin
上级
daa1c86f
c86d7398
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
45 addition
and
19 deletion
+45
-19
src/node/plugin.ts
src/node/plugin.ts
+45
-19
未找到文件。
src/node/plugin.ts
浏览文件 @
c6c293d5
...
...
@@ -4,11 +4,15 @@ import * as path from "path"
import
*
as
util
from
"
util
"
import
{
Args
}
from
"
./cli
"
import
{
HttpServer
}
from
"
./http
"
import
{
paths
}
from
"
./util
"
/* eslint-disable @typescript-eslint/no-var-requires */
export
type
Activate
=
(
httpServer
:
HttpServer
,
args
:
Args
)
=>
void
/**
* Plugins must implement this interface.
*/
export
interface
Plugin
{
activate
:
Activate
}
...
...
@@ -23,38 +27,60 @@ require("module")._load = function (request: string, parent: object, isMain: boo
return
originalLoad
.
apply
(
this
,
[
request
.
replace
(
/^code-server/
,
path
.
resolve
(
__dirname
,
"
../..
"
)),
parent
,
isMain
])
}
/**
* Load a plugin and run its activation function.
*/
const
loadPlugin
=
async
(
pluginPath
:
string
,
httpServer
:
HttpServer
,
args
:
Args
):
Promise
<
void
>
=>
{
try
{
const
plugin
:
Plugin
=
require
(
pluginPath
)
plugin
.
activate
(
httpServer
,
args
)
logger
.
debug
(
"
Loaded plugin
"
,
field
(
"
name
"
,
path
.
basename
(
pluginPath
)))
const
packageJson
=
require
(
path
.
join
(
pluginPath
,
"
package.json
"
))
logger
.
debug
(
"
Loaded plugin
"
,
field
(
"
name
"
,
packageJson
.
name
||
path
.
basename
(
pluginPath
)),
field
(
"
path
"
,
pluginPath
),
field
(
"
version
"
,
packageJson
.
version
||
"
n/a
"
),
)
}
catch
(
error
)
{
if
(
error
.
code
!==
"
MODULE_NOT_FOUND
"
)
{
logger
.
warn
(
error
.
message
)
}
else
{
logger
.
error
(
error
.
message
)
}
logger
.
error
(
error
.
message
)
}
}
const
_loadPlugins
=
async
(
httpServer
:
HttpServer
,
args
:
Args
):
Promise
<
void
>
=>
{
const
pluginPath
=
path
.
resolve
(
__dirname
,
"
../../plugins
"
)
const
files
=
await
util
.
promisify
(
fs
.
readdir
)(
pluginPath
,
{
withFileTypes
:
true
,
})
await
Promise
.
all
(
files
.
map
((
file
)
=>
loadPlugin
(
path
.
join
(
pluginPath
,
file
.
name
),
httpServer
,
args
)))
}
export
const
loadPlugins
=
async
(
httpServer
:
HttpServer
,
args
:
Args
):
Promise
<
void
>
=>
{
/**
* Load all plugins in the specified directory.
*/
const
_loadPlugins
=
async
(
pluginDir
:
string
,
httpServer
:
HttpServer
,
args
:
Args
):
Promise
<
void
>
=>
{
try
{
await
_loadPlugins
(
httpServer
,
args
)
const
files
=
await
util
.
promisify
(
fs
.
readdir
)(
pluginDir
,
{
withFileTypes
:
true
,
})
await
Promise
.
all
(
files
.
map
((
file
)
=>
loadPlugin
(
path
.
join
(
pluginDir
,
file
.
name
),
httpServer
,
args
)))
}
catch
(
error
)
{
if
(
error
.
code
!==
"
ENOENT
"
)
{
logger
.
warn
(
error
.
message
)
}
}
}
if
(
process
.
env
.
PLUGIN_DIR
)
{
await
loadPlugin
(
process
.
env
.
PLUGIN_DIR
,
httpServer
,
args
)
}
/**
* Load all plugins from the `plugins` directory, directories specified by
* `CS_PLUGIN_PATH` (colon-separated), and individual plugins specified by
* `CS_PLUGIN` (also colon-separated).
*/
export
const
loadPlugins
=
async
(
httpServer
:
HttpServer
,
args
:
Args
):
Promise
<
void
>
=>
{
const
pluginPath
=
process
.
env
.
CS_PLUGIN_PATH
||
`
${
path
.
join
(
paths
.
data
,
"
plugins
"
)}
:/usr/share/code-server/plugins`
const
plugin
=
process
.
env
.
CS_PLUGIN
||
""
await
Promise
.
all
([
// Built-in plugins.
_loadPlugins
(
path
.
resolve
(
__dirname
,
"
../../plugins
"
),
httpServer
,
args
),
// User-added plugins.
...
pluginPath
.
split
(
"
:
"
).
map
((
dir
)
=>
_loadPlugins
(
path
.
resolve
(
dir
),
httpServer
,
args
)),
// Individual plugins so you don't have to symlink or move them into a
// directory specifically for plugins. This lets you load plugins that are
// on the same level as other directories that are not plugins (if you tried
// to use CS_PLUGIN_PATH code-server would try to load those other
// directories as plugins). Intended for development.
...
plugin
.
split
(
"
:
"
).
map
((
dir
)
=>
loadPlugin
(
path
.
resolve
(
dir
),
httpServer
,
args
)),
])
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录