【发布时间】:2016-10-12 05:00:35
【问题描述】:
我正在为我的 npm 模块编写测试。 这些测试需要安装一个 npm 模块的多个版本,以检查该模块是否会验证它们是兼容的还是不兼容的。
不知何故,我在 stackoverflow 或 npm 数据库上找到的所有未缓存库或函数都不起作用..
我使用辅助函数安装/卸载 npm 模块:
function _run_cmd(cmd, args) {
return new Promise((res, rej) => {
const child = spawn(cmd, args)
let resp = ''
child.stdout.on('data', function (buffer) {
resp += buffer.toString()
})
child.stdout.on('end', function() {
res(resp)
})
child.stdout.on('error', (err) => rej(err))
})
}
global.helper = {
npm: {
install: function (module) {
return _run_cmd('npm', ['install', module])
},
uninstall: function (module) {
decacheModule(module)
return _run_cmd('npm', ['uninstall', module])
}
}
}
这是我当前的 decache 函数,它应该清除所有模块缓存(我尝试了其他的,包括 npm 模块,它们都不起作用)
function decacheModules() {
Object.keys(require.cache).forEach(function(key) {
delete require.cache[key]
})
}
我正在安装多个版本的 less 模块 (https://www.npmjs.com/package/less)
在我的第一次测试中,我安装了一个不推荐使用的版本,它没有render-function。
在其他一些测试中,我正在安装具有render-function 的最新版本。不知何故,如果我测试那个测试确实失败了。
如果我跳过第一个测试,另一个测试会成功。 (render-函数存在)。
这让我相信删除 require.cache 没有影响...
我正在使用节点 v4.2.4。
【问题讨论】:
标签: node.js caching npm require