Javascript 如何以编程方式删除npm包?
我希望能够在node.js应用程序的运行时动态添加和删除npm包。使用Javascript 如何以编程方式删除npm包?,javascript,node.js,npm,node-modules,npm-install,Javascript,Node.js,Npm,Node Modules,Npm Install,我希望能够在node.js应用程序的运行时动态添加和删除npm包。使用npm.install(…)安装包可以正常工作,但是npm.remove(…)只是从文件系统中删除包,但是代码中仍然需要实际的模块。我试图清除npm缓存和各种模块,如decache,但没有成功。如何以编程方式删除包 下面的代码以包“commander”为例说明了我的过程 const npm=require(“npm”); const assert=require(“assert”); const name=“指挥官”; npm
npm.install(…)
安装包可以正常工作,但是npm.remove(…)
只是从文件系统中删除包,但是代码中仍然需要实际的模块。我试图清除npm缓存和各种模块,如decache
,但没有成功。如何以编程方式删除包
下面的代码以包“commander”为例说明了我的过程
const npm=require(“npm”);
const assert=require(“assert”);
const name=“指挥官”;
npm.load({},错误=>{
试一试{
console.log(require(name));
}捕获(e){
控制台日志(“不可用-良好”);
}
//安装软件包
npm.install(名称,(错误,数据)=>{
日志(“错误安装”,错误);
断言(要求(名称)!=null)
//取下包装
npm.remove(名称,(错误,数据)=>{
日志(“错误删除”,错误);
require.cache={};
//尽管如此,文件还是从FS中删除了
console.log(require(name));
})
});
});
而不是require.cache={}
尝试delete require.cache[name]
。在console.log(require(name))之前也尝试console.log(require.cache)
以确保已将其从缓存中删除。尝试此操作后,require.cache的键实际上似乎是包的主文件的绝对路径。这就是您建议的delete require.cache[require.resolve(name)]
,当我这样做时,我会得到错误error:enoint:没有这样的文件或目录,当我需要模块而不是require.cache={}
尝试delete require.cache[name]
时,打开“/usr/local/../node\u modules/commander/index.js'
。在console.log(require(name))之前也尝试console.log(require.cache)
以确保已将其从缓存中删除。尝试此操作后,require.cache的键实际上似乎是包的主文件的绝对路径。这就是您建议的delete require.cache[require.resolve(name)]
,当我这样做时,我会得到错误error:enoint:没有这样的文件或目录,在需要模块时打开“/usr/local/../node\u modules/commander/index.js”