我找到了this Q&A。
我尝试使用以下方法从package.json获取版本:
import { version } from './package.json';
但结果是:
package.json' has unsupported extension. The only supported extensions are '.ts',
'.tsx', '.d.ts'.
答案 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_GitBranch
,NG_ComputerName
,NG_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
,它会同步版本号,生成并启动