You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:15:03