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

时间:2016-12-13 14:33:13

标签: typescript versioning

我找到了this Q&A

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

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

但结果是:

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

3 个答案:

答案 0 :(得分:6)

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

.vue

修改

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

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

显然您需要使用 module: { loaders: [ ... {test: /\.json$/, loader: 'json-loader'}, ....

进行安装

答案 1 :(得分:1)

对于专为浏览器设计且不依赖于 Webpack 或任何其他依赖项的库,我喜欢这样做的方式是向 prebuild 添加一个 package.json 脚本,将版本写入文件.

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

这会使用以下代码运行 node.js:

'export const LIB_VERSION = ' + JSON.stringify(require('./package.json').version) + ';'

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

这导致 version.ts 包含:

export const LIB_VERSION = "1.0.0";

然后您可以简单地从其他文件导入和使用它:

import { LIB_VERSION } from './version';

答案 2 :(得分:0)

有多种方法,但是我发现最有用的一种方法是使用ng-node-environment软件包。这将生成文件./src/environments/base.ts,您可以在打字稿导入中直接引用该文件。它包含一个名为sharedEnvironment的const对象。您的导入行如下所示:import sharedEnvironment from './base';

执行命令时,它将查找所有以'NG_'开头的环境变量,并将它们作为属性添加到sharedEnvironment

因此,我创建了一个package.json脚本,用于设置变量并执行ng-node-environment。为了兼容性,我使用了跨环境使其与平台无关(可在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,并在我的environment.ts中使用它。

注意:如果我调用了变量NG_APP_Version,则属性名称将以驼峰式大小写为appVersion

import sharedEnvironment from './base';

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

当然,通过这种方式,我可以在执行package.json之前通过设置其他变量来添加ng-node-environment中的其他值,或者可以通过创建名为NG_<Something>的变量来预先添加更多属性,例如: NG_GitBranchNG_ComputerNameNG_CliVersion

在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,它会同步版本号,生成并启动