如何在 TypeScript 中导入 package.json?

2023-12-19

我正在尝试在 TypeScript 中导入我的 package.json 文件,但它似乎不起作用。具体来说,我只是尝试导入它,以便可以访问日志语句的名称和版本属性。就像是:

import * as pjson from '../package.json';
// other code here
log.info(`${pjson.name}:${pjson.version}` started on port ...);

我们在使用 Node/Babel 的其他项目中的其他地方也有相同的语法,但我试图围绕这些部分引入一些 TypeScript。在其他地方我们会做类似的事情:

import { name, version} from '../package.json';

但这在这里不起作用。我按照以下说明进行操作https://www.npmjs.com/package/json-d-ts https://www.npmjs.com/package/json-d-ts这至少使我的导入语句中的错误消失了,但现在当我尝试访问属性时,出现以下错误:

src/index.ts(20,21): error TS2339: Property 'name' does not exist on type 'typeof import("*.json")'.
src/index.ts(20,35): error TS2339: Property 'version' does not exist on type 'typeof import("*.json")'.

有没有办法解决这个问题,或者我只需要在某个地方硬编码这些值(而不是从 package.json 动态检索它们)?也许我可以声明一个类型import("*.json")以某种方式定义了这些属性吗?


如何导入 *.json ?

正如已经回答的那样,您需要 Typescript >= 2.9 以及以下设置tsconfig.json:

{
  "resolveJsonModule": true,
  "esModuleInterop": true,
  "module": "commonjs"
}

但也有限制:

  • 您必须编译为 CommonJS
  • 您导入的所有 JSON 都必须位于"rootDir"

不幸的是"rootDir"通常是一个文件夹beneathpackage.json 像“./src”一样,事情就会失败。

So:
如何导入package.json? 你可以require it:
const pjson = require('../package.json');

如果您使用 npm.start:你不需要: https://docs.npmjs.com/misc/scripts#packagejson-vars

package.json 字段附加到 npm_package_ 前缀上。因此,例如,如果您的 package.json 文件中有 {"name":"foo", "version":"1.2.5"} ,那么您的包脚本会将 npm_package_name 环境变量设置为“foo”,并将 npm_package_version 设置为“1.2.5”。您可以使用 process.env.npm_package_name 和 process.env.npm_package_version 访问代码中的这些变量,对于其他字段,依此类推。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 TypeScript 中导入 package.json? 的相关文章

随机推荐

  • std::map 和 std::variant 的不完整类型

    考虑这个简化且非常具体的递归变体实现std variant include
  • Pyramid.安全问题:双cookies? cookie 不安全?过期?

    我正在第一次尝试金字塔安全模块 我使用此登录代码来设置 auth tkt view config route name LoginForm request method POST renderer string class LoginFor
  • PHP realpath函数问题

    我似乎无法让 realpath 函数处理变量 有办法解决这个问题吗 当我在函数中使用变量时 它不会返回任何内容 我知道路径名在没有 realpath 函数的情况下也可以工作 但我想将 realpath 函数与我的路径名一起使用 realpa
  • 确保 URI 有效

    我试图确保传递给我的 go 程序的 URL 是有效的 但是 我似乎不知道该怎么做 我以为我可以直接喂它url Parse 但这似乎不起作用 package main import fmt net url func main url err
  • 用于获取合并请求中已更改文件列表的 Azure Repos REST API

    Goal 每当拉取请求获得批准并且审阅者在 azure 存储库中完成 合并 拉取请求时 我想确定该合并请求中的文件列表 根据文件扩展名 我必须触发相应的构建管道 Issue 截至目前 从 azure devOps 门户来看这似乎是不可能的
  • Cassandra 没有地理空间支持是否有原因?

    由于 Cassandra 基于 Dynamo 论文 分布式 自平衡哈希表 BigTable 并且有一些空间索引非常适合该范例 quadkey http msdn microsoft com en us library bb259689 as
  • 从日期数组中找出剩余天数[重复]

    这个问题在这里已经有答案了 我有一个如下所示的数组 combinedBirthdates 03 12 2013 03 12 2013 08 13 1990 12 09 1989 02 06 09 08 03 02 1990 08 22 19
  • 线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 0

    我是学习java的新手 在遵循书中的教程时 我收到了此错误 Exception in thread main java lang ArrayIndexOutOfBoundsException 0 我尝试从网上进行研究以了解有关该错误的更多信
  • 当用户点击 div 外部时如何隐藏 Backbone 中的 div?

    我在 Backbone 中有一个包含内部 div 的视图 我想当用户单击 div 外部时隐藏 div 我不知道如何在视图内设置一个事件 显示 click NOT inner div removeDiv 关于如何执行此操作有什么建议吗 通常的
  • Twig:如何在自定义函数中手动转义?

    我编写了自己的 Twig 函数来输出 HTML 所以我有is safe set to html这样 Twig 就知道不要逃避我的函数的输出 但是 我的函数需要参数 参数之一直接放入输出中 我想在输出它之前转义它 所以看来我只需要能够在输出之
  • Jquery从左到右滑动使div在幻灯片上向上跳跃

    我正在尝试创建一种效果 当单击链接时 它会使初始 div 向左滑动并显示向左滑动的第二个 div 当从第二个 div 单击链接时 div 与第一个 div 一起向右滑动div 也向右滑动 到目前为止 这是我的代码 HTML div a hr
  • 方向改变后移动视口高度

    我正在将一个侦听器附加到orientationchange https developer mozilla org en US docs Web Events orientationchange event window addEventL
  • 在Python 2.5中解码未知unicoding编码的最佳方法[重复]

    这个问题在这里已经有答案了 我完全明白了吗 不管怎样 我正在解析很多 html 但我并不总是知道它的编码是什么 令人惊讶的数字谎言 下面的代码很容易显示我到目前为止所做的事情 但我确信有更好的方法 我们将非常感谢您的建议 import lo
  • 使用Python 2.7.11需要tensorflow会发生ImportError

    I tried pip install tensorflow在 OS X El Capitan 上 它成功了 但是 如果我尝试导入tensorflow 则会发生ImportError 当你知道的时候请告诉我 gt gt gt import
  • Active Directory 本地管理器

    我需要实现一个 Active Directory 本地 管理器 用户可以在其中执行所有任务 例如添加用户 删除用户 分配许可证和分配组等 用户有用户名 密码和域控制器名称 因此他只需登录我的应用程序并管理一切 实际上 物理地安排客户端属性会
  • 轻量级java事务管理[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我目前正在为主要针对智能手机的回合制持久世界游戏开发游戏服务器 并且我目前正在开始实现持久层 并且我正在寻找一些提示 建议 我最初计划使用
  • 如何使用坐标点在图像上创建热图?

    我有一张尺寸为 1024 x 1360 的病理图像 我有一些区域和坐标点的概率值 如何使用图像上的坐标点和概率值编写热图生成代码 下面给出了概率值 csv 文件格式的详细信息 任何帮助将不胜感激 Edit CSV 文件格式下载 csv 文件
  • 如何在 Rails 3.1 应用程序中完全禁用 CoffeeScript?

    当我生成一个新的控制器时 Rails 也会生成一个 js coffee控制器的文件也是如此 因为我不使用 CoffeeScript 所以我想要 Rails 来生成 js给我的文件 注释掉就足够了coffee railsgem 在 Rails
  • C 程序中的命令行参数?

    如何读取C 中的命令行参数 例如 在 test help or test build 如何访问 build 或 help 您的参数位于 argv 中 int main int argc char argv 如果你打印 argv 的内容 ar
  • 如何在 TypeScript 中导入 package.json?

    我正在尝试在 TypeScript 中导入我的 package json 文件 但它似乎不起作用 具体来说 我只是尝试导入它 以便可以访问日志语句的名称和版本属性 就像是 import as pjson from package json