Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何以编程方式删除npm包?_Javascript_Node.js_Npm_Node Modules_Npm Install - Fatal编程技术网

Javascript 如何以编程方式删除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

我希望能够在node.js应用程序的运行时动态添加和删除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”