从预安装时运行的 npm 脚本中查找 package.json 文件

2023-11-25

所以我需要阅读package.json在通过 npm 安装新包之前。

为什么首先要读取 package.json ?

我将 npm 用于单独版本控制并且可以具有相互依赖关系的 CSS 组件。(没有提供 JavaScript)

寻找一堆依赖项的版本冲突,我需要检测何时package A需要package [email protected] and package B需要package [email protected]并处理它。

Npm(从版本 3 开始)通过在树的更深处嵌套冲突的模块来处理这些问题。您现在最终获得了同一模块的两个版本。 CSS 有一个全局命名空间和一个 mixin(在 Sass 的情况下)会互相覆盖并破坏你的 CSS。

npm 博客中完美地概述了这种平面依赖问题:http://blog.npmjs.org/post/101775448305/npm-and-front-end-packaging

即使不考虑我们的具体用例,我也觉得很奇怪,您无权访问package.json in preinstall and postinstall脚本。它们似乎只是针对该用例。

我尝试过的

My package.json我正在安装的包看起来像这样:

{
    "name": "testmodule",
    "version": "0.3.6",
    "description": "TODO",
    "scripts": {
        "preinstall": "npm i some-script && some-script",
    },
    "author": "TODO",
    "license": "MIT"
}

里面那个some-script我运行的包:

console.log( process.cwd() );
console.log( __dirname );

然后我运行:

~/path/to/folder $ npm i testmodule

这将导致:

$ npm i testmodule

> [email protected] preinstall /path/to/folder/node_modules/.staging/testmodule-5cc9d333
> some-script

/path/to/folder/node_modules/.staging/test-module-5cc9d333
/path/to/folder/node_modules/.staging/test-module-5cc9d333/node_modules/some-script

现在我完全明白我无法真正访问其中的根npm i之所以运行,是因为我的脚本是由 npm 的子进程运行的,并且具有完全不同的根。

我然后想npm root应该跟踪我的实际根目录并将其作为参数从 testmodule package.json 内部传递给我的脚本:

{
        "name": "testmodule",
        "version": "0.3.6",
        "description": "TODO",
        "scripts": {
                "preinstall": "npm i some-script && some-script \"$(npm root)\"",
        },
        "author": "TODO",
        "license": "MIT"
}

不幸的是,这也默认返回到暂存路径:

/path/to/folder/node_modules/.staging/testmodule-5cc9d333/node_modules

I filed an issue与注册表,但我不抱希望他们能及时完成。另外,我的脚本需要在较旧的 npm 安装上运行。

与此同时,我在我的内心想出了类似的东西some-script:

let pgkPath = process.cwd().split('/node_modules/')[0];

那将会返回/path/to/folder/这是正确的,但它假设没有人运行npm i在一个顺便命名的文件夹中node_modules...看起来很老套。

Question

如何从通过预安装运行的 npm 脚本内部访问 package.json 的路径?对我来说,这似乎是一个不太离谱的要求?


我不完全理解你的用例,但回答你寻找父母的具体问题package.json来自预安装脚本:

Pass $(cd .. && npm prefix)作为脚本的参数,然后加载./package.json.

npm prefix将返回最近的父目录以包含package.json文件,当从..目录,应返回父 npm 包的路径。

{
        "name": "testmodule",
        "version": "0.3.6",
        "description": "TODO",
        "scripts": {
            "preinstall": "npm i some-script && some-script \"$(cd .. && npm prefix)\"",
        },
        "author": "TODO",
        "license": "MIT"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从预安装时运行的 npm 脚本中查找 package.json 文件 的相关文章

随机推荐

  • 渐进式网络应用程序中的后台事件? (构建闹钟应用程序)

    我正在尝试渐进式网络应用程序 我想尝试构建的一个场景是闹钟应用程序 我认为要使这个应用程序正常工作 它必须在后台运行 并在满足内部条件 当前时间 闹钟时间 后激活 这可能吗 或者渐进式网络应用程序还没有自由在后台操作 通过 API 访问手机
  • PhoneGap 3.3.0 中的本地通知

    谢谢道森 下面提到的问题在android中已经得到解决 但遗憾的是 当我在 ios 中构建项目时它不起作用 有人可以帮忙吗 我将使用这个插件来构建带有本地通知的 android ios 应用程序 https github com katze
  • 写入包含“”的字符串

    我有一个来自 xml 文档的字符串
  • Javascript从字符串动态调用对象方法

    我可以动态调用方法名称为字符串的对象方法吗 我想像这样 var FooClass function this smile function var method smile var foo new FooClass I want to ru
  • 如何将prestashop与android集成? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 最近我使用 prestashop 创建了一个 eshop 网站 https www prestashop com en 因为我要为其构建 Andro
  • Sharepoint:如何找到托管特定 Web 部件的所有页面?

    正如问题所述 有没有办法确定哪些页面包含我的 Web 部件 如果您正在寻找代码 我可以为您提供一些东西 如果您想查找所有内容查询 Web 部件 那么您可以像这样调用我的代码 FindWebPart http server com Micro
  • 英特尔 Inspector 报告我的自旋锁实现中存在数据争用

    我使用 Windows 中的 Interlocked 函数制作了一个非常简单的自旋锁 并在双核 CPU 两个线程递增变量 上进行了测试 该程序似乎工作正常 每次都给出相同的结果 但不使用同步时情况并非如此 但是英特尔并行检查器说有一个竞争条
  • Eclipse 突出显示该单词的相同出现

    在Notepad 中 它有一个非常好的功能 如果我选择一个单词 它会突出显示整个文本中的所有相同单词 我还可以设置热键以突出显示最多五个具有不同样式的不同单词 请参见下面的效果 有什么方法可以在 eclipse 中获得类似的效果吗 我知道在
  • watchOS - 显示有关并发症的实时出发数据

    我有一个公共交通应用程序 其中包含火车的实时出发数据 我想添加一个复杂功能 显示下一趟火车的出发时间 是否可以显示 或刷新 有关并发症的实时数据 例如 显示 到 X 站 3 分钟 根据来自公共交通 API 的信息 数据每分钟都可能发生变化
  • 同步适配器中的 ContentResolver.requestSync 在 Android 中不起作用

    我正在尝试使用 StubProvider 和 StubAuthenticator 编写一个同步适配器 我遵循了官方指南 我的代码运行没有任何错误 但 onPerformSync 没有被调用 我尝试了一切但没有用 我的完整项目可以从以下位置下
  • 有没有办法以编程方式重新启动 azure 函数

    我有一个 Azure 函数每隔几分钟在计时器上运行一次 在运行不同时间后 由于外部 API 每次运行都会开始失败 并在 Azure 门户中手动单击重新启动按钮修复了问题和作业再次工作 有没有办法让 azure 函数自行重新启动 或者让某些东
  • MAMP 将 php.ini 保存在哪里?

    我最近买了一台 mac 但我根本不习惯在 mac 上开发 我有 MAMP Pro 1 9 6 1 我做了一个定位php ini并得到这个 locate php ini Applications MAMP conf php5 2 php in
  • 如何以 html 形式将多个值附加到单个参数?

    假设我有以下形式
  • 使用 dplyr 按组计算百分比计数

    带数据框df像下面这样 df lt data frame colors c red blue green red red blue 我可以使用 dplyr 找出每种颜色的计数 如下所示 df gt group by color gt sum
  • Flutter 设计 Instagram 像气球/工具提示小部件

    在颤振中我想将此布局设计为小部件 当前实现的代码具有以下结果 你能帮我解决这个设计上的一些问题吗 因为高度 重量和角应该是可定制的 我应该可以在其中放入一些小部件 例如 class MessageClipper extends Custom
  • Gson多态序列化

    使用 Gson 2 2 2 我试图序列化 POJO 行为 的数组列表 我有一个适配器 它几乎是我在网上看到的适配器的副本 public class BehaviorAdapter implements JsonSerializer
  • 如何在 Crystal Reports for Visual Studio 中实现数据透视报表?

    除了带有小计的水平线之外 我对任何报告都是菜鸟 我有一个数据集 其中包含汽车在停车场所花费的时间 我必须生成一个表格 其中每小时显示一列 每天显示一行 显示特定日期特定时间的条目数 我会发现在 RDLC 设计器中更容易做到这一点 因为它具有
  • 适用于 Docker 的 Google Cloud Logging 驱动程序

    我无法验证谷歌云驱动程序gcplogs对于 Docker 尽管我已经设置了环境变量GOOGLE APPLICATION CREDENTIALS到我的服务帐户的 JSON 凭据所在的路径 文件 错误信息如下 ERROR for oncrm o
  • 简单布局 vs. 标准布局 vs. POD [重复]

    这个问题在这里已经有答案了 通俗地说 普通类型 标准布局类型和 POD 之间有什么区别 具体来说 我想确定是否new T不同于new T 对于任何模板参数T 属于哪一类特征is trivial is standard layout and
  • 从预安装时运行的 npm 脚本中查找 package.json 文件

    所以我需要阅读package json在通过 npm 安装新包之前 为什么首先要读取 package json 我将 npm 用于单独版本控制并且可以具有相互依赖关系的 CSS 组件 没有提供 JavaScript 寻找一堆依赖项的版本冲突