我发现了这个问题
我已尝试使用以下方法从package.json获取版本:
import { version } from './package.json';
但结果是:
package.json' has unsupported extension. The only supported extensions are '.ts',
'.tsx', '.d.ts'.
有多种方法,但我发现最有用的方法是使用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
,它会同步版本号、构建和启动
如果您在commonJS环境中,为什么不简单地使用
const pj = require('./package.json')
console.log(pj.version)
编辑
由于您似乎正在使用webpack,只需添加适当的加载程序
module: {
loaders: [
...
{test: /\.json$/, loader: 'json-loader'},
....
很明显,你需要使用npm安装
来安装它
我喜欢对为浏览器设计的库这样做,而不依赖于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