使用npm作为自定义插件管理器?

时间:2017-03-25 23:34:18

标签: node.js plugins npm

考虑sublime文本,您可以在其中安装或卸载插件。我想要我的应用程序,我想使用npm / github来做它。

也许我要求您的软件包以myapp-开头,才能被视为我的应用的插件。如何基于此搜索npm,并将软件包安装/更新到我想要的文件夹(而不是node_modules),理想情况下,即使没有安装npm(使用http api?),它也应该可以工作。 / p>

我的应用程序的插件进入plugins/plugin-name文件夹,我需要做的就是将他们的git源下载到该文件夹​​中

3 个答案:

答案 0 :(得分:1)

我创建了一个解决类似问题的项目。请参阅live-plugin-manager

您可以在运行时从npm安装,卸载和加载插件。

import {PluginManager} from "live-plugin-manager";
import * as path from "path";

const manager = new PluginManager({
  pluginsPath: path.join(__dirname, "plugins")
});

async function run() {
  await manager.installFromNpm("moment");

  const moment = manager.require("moment");
  console.log(moment().format());

  await manager.uninstall("moment");
}

run();

在上面的代码中,我在运行时安装moment包,加载并执行它。在这里我使用了typescript,但同样可以使用普通的javascript编写。

插件安装在PluginManager构造函数中指定的目录内,如果未指定,则安装在plugins目录中。

答案 1 :(得分:1)

我刚刚创建了一个很棒的模块,用于增强您的建议: https://www.npmjs.com/package/@kawix/core

您可以阅读README.md,为尝试理解用法,我将添加一个基本示例:

> npm install -g @kawix/core
> kwcore  "https://raw.githubusercontent.com/voxsoftware/kawix-core/master/example/npmrequire/express.js"

这是文件https://raw.githubusercontent.com/voxsoftware/kawix-core/master/example/npmrequire/express.js

的内容
// this will download the npm module and make a local cache
import express from 'npm://express@^4.16.4'


var app = express() 
app.get('/', function (req, res) {
  res.send('Hello World')
}) 
app.listen(3000)
console.log("Listening on 3000")

答案 2 :(得分:0)

https://api-docs.npms.io/有一个用于搜索npm包的http API。

可以这样使用:https://api.npms.io/v2/search?q=keywords:myapp获取myapp的所有插件

要实际下载/安装npm软件包到任何文件夹,我找到了一个名为download-npm-package的npm软件包,它允许我在代码中执行它