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

030*_*030 3 versioning typescript

我找到了这个Q&A.

我试图从package.json中获取版本:

import { version } from './package.json';
Run Code Online (Sandbox Code Playgroud)

但它导致:

package.json' has unsupported extension. The only supported extensions are '.ts',
'.tsx', '.d.ts'.
Run Code Online (Sandbox Code Playgroud)

Bru*_*der 8

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

const pj = require('./package.json')
console.log(pj.version)
Run Code Online (Sandbox Code Playgroud)

编辑

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

   module: {
    loaders: [
        ...
        {test: /\.json$/, loader: 'json-loader'},
        ....
Run Code Online (Sandbox Code Playgroud)

显然你需要安装使用 npm install

  • 我希望答案不仅在技术上正确,而且具有常识和良好实践。想象一下一个新手正在做这里所说的事情。将会一片混乱 (6认同)
  • 这是可行的,但它还会将整个 package.json 包含到已编译的 javascript 模块中,并将其公开给使用您网站的公众。通过对您使用的所有内容以及您在 package.json 中放入的任何设置进行编目,您添加了不必要的代码,并使您的网站面临潜在的漏洞 (4认同)
  • 请参阅我的答案以获得不那么可怕的版本:/sf/answers/4739104331/ (4认同)
  • @丹尼尔·桑。当然。我只是谦虚地回答别人问我的问题,我不是在为新手传福音。但继续吧。既然你“知道”,那就回答一下问题吧。提出一个专业且详细的理由来解释为什么这是一个“安全漏洞”以及更好的方法。像你这样没有论证的笼统陈述是没有帮助的 (2认同)

Tim*_*Tim 8

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

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

这将使用以下代码运行 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';

  • 这应该是公认的答案,因为它是迄今为止最好的 Typescript 方式 (5认同)
  • 非常优秀的。我只建议您将相同的脚本放在“preinstall”而不是“prebuild”上,这样即使您有多个构建脚本,它也会始终运行。否则,您必须在每个构建脚本之前添加“npm run prebuild &&” (2认同)