Node.js脚本中检查模块是否已安装
一 :require.resovle(‘模块名称’) 函数 尝试加载模块
1 :限制 (当前脚本的目录下查询模块)
require.resolve
方法是用来查找本地
安装的模块,而不是全局
安装的模块;- 在使用
require.resolve('sass')
时,它会从当前脚本的目录
开始查找名为sass的
模块,并返回该模块的路径
2 :使用方式
下面是一些可能有用的代码示例:
javascriptCopy code// 检查模块是否已安装
function isModuleInstalled(name) {
try {
require.resolve(name);
return true;
} catch (error) {
return false;
}
}
// 示例用法
if (isModuleInstalled('express')) {
console.log('Express已安装');
} else {
console.log('Express未安装');
}
在这个示例中,require.resolve()
函数会尝试加载指定的模块
成功:
返回该模块的绝对路径;
失败:
会抛出一个Error
对象。在这里我们使用try/catch
块来捕获这个错误并返回false
。
如果isModuleInstalled
函数返回true
,则表示该模块已经安装了
二:child_process模块 exec() 执行shell命令查询;
1 :全局模块查询
- npm list
-g
[模块名称]
const { exec } = require('child_process');
exec('npm list -g sass', {shell:process.platform === 'win32'},(error, stdout, stderr) => {
if (error) {
// 模块不存在会产生: Error: Command failed: npm list -g sass
console.error(`执行错误: ${error}`);
}
if (stderr) {
console.error(`stderr: ${stderr}`);
return;
}
// 标准输出stdout :
// 不存在:D:\nodejs `-- (empty)
// 存在:路径 + `-- @vue/cli@5.0.8
if (stdout.includes('sass')) {
console.log('sass 已经安装');
} else {
console.log('sass 没有安装');
}
});
2 :本地查询 [ 当前脚本所在目录 ]
- npm list [模块名称]
const { exec } = require('child_process');
exec('npm list sass', {shell:process.platform === 'win32'},(error, stdout, stderr) => {
if (error) {
// 模块不存在会产生: Error: Command failed: npm list -g sass
console.error(`执行错误: ${error}`);
}
if (stderr) {
console.error(`stderr: ${stderr}`);
return;
}
// 标准输出stdout :
// 不存在:D:\nodejs `-- (empty)
// 存在:路径 + `-- @vue/cli@5.0.8
if (stdout.includes('sass')) {
console.log('sass 已经安装');
} else {
console.log('sass 没有安装');
}
});