当前位置: 首页 > 知识库问答 >
问题:

如何从Typescript中的package.json获取版本?

严修谨
2023-03-14

我发现了这个问题

我已尝试使用以下方法从package.json获取版本:

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

但结果是:

package.json' has unsupported extension. The only supported extensions are '.ts',
'.tsx', '.d.ts'.

共有3个答案

姚培
2023-03-14

有多种方法,但我发现最有用的方法是使用ng node环境包。这将生成一个文件/src/environments/base.ts,您可以在typescript导入中直接引用该文件。它包含一个名为sharedEnvironment的常量对象。您的导入行如下所示:从“/base”导入sharedEnvironment

当您执行该命令时,它会查找以“NG”开头的所有环境变量,并将它们作为属性添加到sharedEnvironment

因此,我创建了一个package.json脚本,用于设置变量并执行ng节点环境。为了兼容性,我使用了cross-env使其平台无关(适用于windows和*nix)

这是我的package.json剧本:-

"scripts": {
    "version": "cross-env-shell NG_APPVERSION=$npm_package_version node ./node_modules/ng-node-environment/index.js",
    "another" : "echo hello world"
}

然后运行:npm run version提取版本并将其放入/src/environments/base.ts

我现在可以访问属性appversion,并在我的环境中使用它。ts

注意:如果我调用了变量NG_APP_Version,则属性名称将以驼峰形式显示在appVersion

import sharedEnvironment from './base';

export const environment = {
  production: false,
  logLevel: LogLevel.Error,
  version : sharedEnvironment.appversion,
};

当然,通过这种方式,我可以在执行ng-node-环境之前通过设置其他变量来添加package.json中的其他值,或者可以通过创建名为的变量来提前添加更多属性NG_

在Angular中开发时,为了确保它始终同步,我使用一个开始脚本开始开发:-

"scripts": {
    "version": "cross-env-shell NG_APPVERSION=$npm_package_version node ./node_modules/ng-node-environment/index.js",
    "start": "npm run version && ng serve"
}

所以我键入:npm start,它会同步版本号、构建和启动

郑茂勋
2023-03-14

如果您在commonJS环境中,为什么不简单地使用

const pj = require('./package.json')
console.log(pj.version)

编辑

由于您似乎正在使用webpack,只需添加适当的加载程序

   module: {
    loaders: [
        ...
        {test: /\.json$/, loader: 'json-loader'},
        ....

很明显,你需要使用npm安装来安装它

颜高朗
2023-03-14

我喜欢对为浏览器设计的库这样做,而不依赖于Webpack或任何其他依赖项的方式是将一个预构建脚本添加到将版本写入TypeScript的package.json可以在其他地方导入的源文件。

  "scripts": {
    "prebuild": "node -p \"'export const LIB_VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > src/version.ts",
    "build": "tsc",
  }

此节点使用以下代码运行:

'导出常量LIB_VERSION='JSON. stringify(需要('./package.json'). version) ';'

并将输出重定向到src/version.ts

这将导致version.ts包含:

export const LIB_VERSION=“1.0.0”

然后,您只需从其他文件导入并使用此文件:

从“/VERSION”导入{LIB_VERSION}

您可能想从源代码管理中排除src/version.ts,这样它的更改就不会浪费您的更改历史!

 类似资料:
  • 问题内容: 有没有办法在nodejs应用中设置版本?我想要这样的东西 问题答案: 我发现以下代码片段最适合我。由于它用于加载,因此无论当前工作目录如何,它都可以工作。 @Pathogen提供的警告: 使用Browserify这样做会带来安全隐患。 注意不要将您的信息公开给客户端,因为这意味着您的所有依赖项版本号,构建和测试命令以及更多信息都将发送给客户端。 如果要在同一项目中构建服务器和客户端,则

  • 要获取节点版本-我希望运行以下内容: 我正在和docker一起运行以下程序: 我明白了: 我的问题是:如何从docker容器中获取节点的版本?

  • 问题内容: 我有一个需要节点版本12或更高版本的Node.js项目。有没有办法在packages.json文件中指定此名称,以便安装程序将自动检查并通知用户是否需要升级? 问题答案: 我认为您可以使用“引擎”字段: 正如您所说的那样,您的代码绝对不能与任何较低版本一起使用,您可能也希望“ engineStrict”标志: 可在npmjs网站上找到package.json文件的文档 更新资料 现在已

  • 问题内容: 如何在运行时找出正在使用的JavaFX版本? 问题答案:

  • 问题内容: 我正在尝试在PowerShell中获取Java版本。版本字符串将打印到 stderr ,因此我试图将其重定向到stdout并将其分配给字符串变量。 我收到以下奇怪的错误: 不带重定向的呼叫(2>&1)给出以下信息: 我认为这里的Java是无关紧要的,其他任何将字符串打印到stderr的程序也会发生同样的情况。 我使用的PowerShell版本是 2.0 。 问题: 如何将stderr重

  • 问题内容: 我正在尝试从下面给出的Java版本输出中获取‘6’ 同样,我写了这个批处理脚本 显示“ 1.6.0_21” 有人可以指导我正确的方向吗?我不太熟悉。 问题答案: 在第一个循环中,说我们将仅使用命令输出中的第三个标记。无需将命令的输出重定向到文件,我们可以在循环本身中运行此命令。插入记号()是转义字符,并且需要,所以我们可以嵌入,并在命令字符串符号。 在循环体内,我们设置了一个新的var