{"id":45019691,"url":"https://github.com/ddvjs/ddv","last_synced_at":"2026-02-19T02:04:08.176Z","repository":{"id":63476020,"uuid":"77660193","full_name":"ddvjs/ddv","owner":"ddvjs","description":"A node server multiple virtual site management tools","archived":false,"fork":false,"pushed_at":"2018-09-07T11:18:42.000Z","size":217,"stargazers_count":7,"open_issues_count":1,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-17T03:54:21.917Z","etag":null,"topics":["ddv","ddv-worker","http-server","https-server","node-server","process-manager","server","server-management","site-manager","ssr","ssr-manager","virtual-site-management","worker-management","worker-service"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ddvjs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-12-30T04:26:10.000Z","updated_at":"2024-12-23T06:39:02.000Z","dependencies_parsed_at":"2022-11-19T17:02:08.942Z","dependency_job_id":null,"html_url":"https://github.com/ddvjs/ddv","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ddvjs/ddv","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddvjs%2Fddv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddvjs%2Fddv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddvjs%2Fddv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddvjs%2Fddv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ddvjs","download_url":"https://codeload.github.com/ddvjs/ddv/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddvjs%2Fddv/sbom","scorecard":{"id":330464,"data":{"date":"2025-08-11","repo":{"name":"github.com/ddvjs/ddv","commit":"b4b3154eb76970b05ff7c440d7f0002c23b450c4"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.2,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":1,"reason":"Found 2/16 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 17 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T03:27:12.807Z","repository_id":63476020,"created_at":"2025-08-18T03:27:12.808Z","updated_at":"2025-08-18T03:27:12.808Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29600852,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T00:59:38.239Z","status":"online","status_checked_at":"2026-02-19T02:00:07.702Z","response_time":117,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ddv","ddv-worker","http-server","https-server","node-server","process-manager","server","server-management","site-manager","ssr","ssr-manager","virtual-site-management","worker-management","worker-service"],"created_at":"2026-02-19T02:04:07.512Z","updated_at":"2026-02-19T02:04:08.169Z","avatar_url":"https://github.com/ddvjs.png","language":"JavaScript","readme":"### ddv 基本使用命令\n\n[![Join the chat at https://gitter.im/ddvjs/ddv](https://badges.gitter.im/ddvjs/ddv.svg)](https://gitter.im/ddvjs/ddv?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n\u003e* `ddv` 服务 是基于 `nodejs` 开发的一个方便`前端开发项目`的`服务器`\n\u003e* `ddv` 的核心不在于框架，而是整合目前流行的框架和打包功能\n\u003e* 减少程序员的`服务部署成本`和`构建环境的配置成本`\n\u003e* `ddv` 能自动在服务器自动打包，还可以兼容低版本浏览器，以及`SEO`优化\n\n## 一、安装DDV服务器\n\n|安装方式|npm安装|\n|------|------|\n|安装命令|`npm -g i ddv`|\n|安装命令[[`淘宝镜像`](https://npm.taobao.org/)]|`npm -g i ddv  --registry=https://registry.npm.taobao.org`|\n\n\u003e* `温馨提示`:\n\u003e* 不建议使用`cnpm -g i ddv`安装，\n\u003e* 因为cnpm版本比较旧，可能会导致全局安装失败\n\u003e* 国内如果网速较慢，建议使用淘宝镜像命令安装`ddv`服务器\n\n## 二、添加站点\n\n```shell\n\nddv -n \u003capp_name\u003e add \u003cpath\u003e\n\n```\n\u003e* 假如我们需要添加 `/home/test/appxxxx/` 文件夹为站点 ,站点管理名字为 `appxxxx`\n\n```shell\n\nddv -n \"appxxxx\" add \"/home/test/appxxxx/\"\n\n```\n\u003e* 或者直接输入\n\n```shell\n\nddv add \"/home/test/appxxxx/\"\n\n```\n\n## 三、查看站点状态\n\n```shell\n\nddv ls\n\n```\n\u003e* 当然，查看状态有以下几个别名\n\n```shell\n\nddv l\nddv ls\nddv list\nddv lists\nddv status\n\n```\n\u003e* 以上命令返回的是一个站点状态，如果需要返回json 可以使用一下命令\n\n```shell\n\nddv jlist\n\n```\n\u003e* 如果需要返回json是格式化过的格式可以可以使用一下命令\n\n```shell\n\nddv prettylist\n\n```\n\n\u003e* 状态参考列表\n\n|转态标识|颜色|状态描述|\n|------|------|------|\n|Listening|绿|该站点正常运行|\n|Runing|黄|该站点正在启动中，建议过1-5秒再重新查询状态|\n|Restarting|黄|该站点正在重新启动中，建议过1-5秒再重新查询状态|\n|Stoped|红|该站点已经停止运行|\n|ErrorConf|红|该站点配置信息错误|\n|ErrorMast|红|主线程错误|\n|ErrorTrys|红|该站点30秒内崩溃10次，被停止|\n\n\u003e* `温馨提示`\n\u003e* `errorConf` `errorMast`错误 可以通过`ddv cat error`来查看历史错误\n\u003e* `errorConf` `errorMast`错误 也可以通过`ddv tail error`来监听错误，然后启动程序\n\u003e* `errorTrys`错误 可以通过`ddv cat \u003capp_name\u003e error`来查看历史错误\n\u003e* `errorTrys`错误 可以通过`ddv tail \u003capp_name\u003e error`来监听错误，然后启动程序\n\n## 四、删除站点\n\n```shell\n\nddv remove \u003cid|app_name\u003e\nddv remove -n \u003capp_name\u003e -i \u003cid\u003e\n\n```\n\n\u003e* 比如我们要删除app_name为`appxxxx`的站点，那我们可以输入\n\n\n```shell\n\nddv remove appxxxx\n\n```\n\n\u003e* 当然，您可以根据您个人的使用习惯选择以下删除别名\n\n```shell\n\nddv delete -n appxxxx\nddv del -n appxxxx\n\n```\n\n\u003e* 为了能更快捷的操作，我们的删除操作支持使用id来操作\n\u003e* 如果你在查询站点列表时候得知`appxxxx`的站点`id`为`1`\n\u003e* 您可以使用一下其中一条命令来进行删除\n\n```shell\n\nddv remove -i 1\nddv delete -i 1\nddv del -i 1\n\n```\n\n\u003e* 如果您想操作的站点不止一个，\n\u003e* 比如删除`id`为`1,5,6,8,10,12`，您可以使用以下命令来进行删除\n\n\n```shell\n\nddv remove -i 1,5,6,8,10,12\nddv delete -i 1,5,6,8,10,12\nddv del -i 1,5,6,8,10,12\n\n```\n\n## 五、重启站点\n\n```shell\n\nddv restart \u003cid|app_name\u003e\nddv restart -n \u003capp_name\u003e -i \u003cid\u003e\n\n```\n\n\u003e* 比如我们要重启app_name为`appxxxx`的站点，那我们可以输入\n\n\n```shell\n\nddv restart appxxxx\nddv restart -n appxxxx\n\n```\n\n\u003e* 当然，您也可以参考删除站点的方式，来使用`id`操作站点重启\n\n\n## 六、停止站点\n\n\u003e* 有时候，可能我们只是想暂时停止这个项目的启动，\n\u003e* 那我们可以使用停止某个站点服务命令\n\n```shell\n\nddv stop \u003cid|app_name\u003e\nddv stop -n \u003capp_name\u003e -i \u003cid\u003e\n\n```\n\n\u003e* 比如我们要停止app_name为`appxxxx`的站点，那我们可以输入\n\n\n```shell\n\nddv stop appxxxx\nddv stop -n appxxxx\n\n```\n\n\u003e* 当然，您也可以参考删除站点的方式，来使用`id`操作站点停止\n\n## 七、停止站点\n\n\u003e* 如果我们想把停止的站点重新启动，\n\u003e* 那我们可以使用启动某个站点服务命令\n\n```shell\n\nddv start \u003cid|app_name\u003e\nddv start -n \u003capp_name\u003e -i \u003cid\u003e\n\n```\n\n\u003e* 比如我们要启动app_name为`appxxxx`的站点，那我们可以输入\n\n\n```shell\n\nddv start appxxxx\nddv start -n appxxxx\n\n```\n\n\u003e* 当然，您也可以参考删除站点的方式，来使用`id`操作站点启动\n\n## 八、停止ddv服务\n\n\u003e* 如果我们想把停止整个ddv的运行，\n\u003e* `温馨提示`：\n\u003e* 该命令仅仅是关闭ddv的服务进程\n\u003e* 并没有彻底关闭整个ddv的`守护线程`\n\u003e* 如果您需要杀掉整个`ddv`的进程，可以查考帮助`十二、杀掉ddv整个进程`\n\n\n```shell\n\nddv stop\n\n```\n\n## 九、启动ddv服务\n\n\n```shell\n\nddv start\n\n```\n## 十、重启ddv服务\n\n\u003e*  该操作会导致`整个` `ddv`下的`所有站点`，包括`管理进程`的重启\n\n```shell\n\nddv restart\n\n```\n## 十一、重载配置信息\n\n\u003e* 如果您仅仅是因为更改了配置文件\n\u003e* 需要使得被更改的站点生效新的命令\n\u003e* 我们可以使用下命令来重载配置文件信息\n\u003e* 该命令仅仅会重启被修改配置信息的站点\n\u003e* 但是被重启的站点还是会导致在访问的客户的长连接断线\n\n\u003e* 注意，该指令仅仅是重载所以站点，并且重启配置变化的站点而已，其他配置的更改请使用`ddv restart`\n\n```shell\n\nddv reload\n\n```\n\n## 十二、杀掉ddv整个进程\n\n\u003e* 当您希望关闭整个`ddv`的`所有进程`，包括`守护进程`的时候\n\n```shell\n\nddv kill\n\n```\n\n## 十三、监听ddv日志尾部变化\n\n\u003e* 这个命令能`监听`到最后的`ddv`日志\n\u003e* 这个命令相当于 `ddv tail all`\n\n```shell\n\nddv tail\n\n```\n\n\u003e* 温馨提示\n\u003e* 这个命令实际上是开了两个进程同时监听两个日志文件\n\u003e* 所以，可能存在输出日志和错误日志的打印先后顺序问题\n\u003e* 如果仅仅需要看错误日志可以选择使用以下命令\n\n```shell\n\nddv tail error\n\n```\n\n\u003e* 如果仅仅需要看输出错误日志可以选择使用以下命令\n\n```shell\n\nddv tail log\n\n```\n\n## 十三、监听站点日志尾部变化\n\n\u003e* 比如我们要监听的站点的app_name为`appxxxx`的站点，那我们可以输入\n\n```shell\n\nddv tail appxxxx all\n\n```\n\n\u003e* 错误日志的命令为\n\n```shell\n\nddv tail appxxxx error\n\n```\n\n\u003e* 输出日志的命令为\n\n```shell\n\nddv tail appxxxx log\n\n```\n\n\u003e* 温馨提示\n\u003e* 也可以使用`id`的方式选择项目\n\n\n```shell\n\nddv tail 1 log\n\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fddvjs%2Fddv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fddvjs%2Fddv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fddvjs%2Fddv/lists"}