Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gzupanda
code-server
提交
e64b1865
C
code-server
项目概览
gzupanda
/
code-server
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
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,体验更适合开发者的 AI 搜索 >>
未验证
提交
e64b1865
编写于
9月 30, 2020
作者:
A
Asher
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add variables to better customize plugin directories
上级
9d87c532
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
38 addition
and
13 deletion
+38
-13
src/node/plugin.ts
src/node/plugin.ts
+38
-13
未找到文件。
src/node/plugin.ts
浏览文件 @
e64b1865
...
...
@@ -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,6 +27,9 @@ 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
)
...
...
@@ -37,24 +44,42 @@ const loadPlugin = async (pluginPath: string, httpServer: HttpServer, args: Args
}
}
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 and the directory specified by
* `PLUGIN_DIR`.
* Also load any individual plugins found in `PLUGIN_DIRS` (colon-separated).
* This allows you to test and develop plugins without having to move or symlink
* them into one directory.
*/
export
const
loadPlugins
=
async
(
httpServer
:
HttpServer
,
args
:
Args
):
Promise
<
void
>
=>
{
await
Promise
.
all
([
// Built-in plugins.
_loadPlugins
(
path
.
resolve
(
__dirname
,
"
../../plugins
"
),
httpServer
,
args
),
// User-added plugins.
_loadPlugins
(
path
.
resolve
(
process
.
env
.
PLUGIN_DIR
||
path
.
join
(
paths
.
data
,
"
code-server-extensions
"
)),
httpServer
,
args
,
),
// For development so you don't have to use symlinks.
process
.
env
.
PLUGIN_DIRS
&&
(
await
Promise
.
all
(
process
.
env
.
PLUGIN_DIRS
.
split
(
"
:
"
).
map
((
dir
)
=>
loadPlugin
(
dir
,
httpServer
,
args
)))),
])
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录