NPM包postinstall脚本如何获取npm install命令执行的根目录
解决方案
直接使用npm生命周期脚本内置的INIT_CWD环境变量即可,这是所有主流包管理工具(npm、yarn、pnpm)都兼容的标准变量,值为执行npm命令时所在工作目录的绝对路径。
实现代码
在你的install.js中按以下方式获取目标www目录即可:
const path = require('path'); // 直接获取执行npm install时的根目录下的www路径 const wwwPath = path.join(process.env.INIT_CWD, 'www');
补充说明
INIT_CWD从npm v5.1.0版本开始内置支持,覆盖目前所有主流使用的npm版本,无需额外安装依赖- 该变量不受包安装位置影响,无论你的包是否被依赖提升、是否在monorepo环境中安装,都能正确获取命令执行路径
- 若需要兼容极端无
INIT_CWD的场景,可以添加上游查找项目根目录的降级逻辑:
const path = require('path'); const fs = require('fs'); let rootDir = process.env.INIT_CWD; // 降级逻辑:从当前包目录向上查找带package.json的目录作为项目根 if (!rootDir) { let current = __dirname; const root = path.parse(current).root; while (current !== root) { if (fs.existsSync(path.join(current, 'package.json'))) { rootDir = current; break; } current = path.dirname(current); } } const targetWwwDir = path.join(rootDir, 'www');
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

