我如何(应该)将一些“不可见”版本信息作为“元数据”添加到我的 Next.js 应用程序中,以便可以从浏览器中使用它?
我的目标是用户“不经常可见”,但可以在某个地方找到它,例如确认已部署哪个版本。 我想到了这些选择:
添加一个
<meta version="1.2.3">
但似乎没有版本号的“有效”元标记。
<!-- v1.2.3 -->
但似乎没有干净的方法在 Next.js 中添加注释。
<div>
但这对我来说似乎非常“hacky”/“肮脏”。
将其作为数据属性添加到应用程序的根目录,如果您愿意,甚至可以添加
<html>
<body>
。看起来像<html data-app-version="1.2.3">
将其添加到全局窗口对象中,以便可以通过JS访问。类似于`window.appVersion =“1.2.3”(我确实意识到这本质上也只是“将其添加到窗口对象”,正如 Olavi 建议的那样)
appVersion
。这样我就可以从浏览器控制台读取版本号:
window.__NEXT_DATA__.props.pageProps.appVersion
示例:
package.json
"version": "1.2.3",
const nextConfig = {
serverRuntimeConfig: {
appVersion: process.env.npm_package_version || '',
},
}
import getConfig from 'next/config';
const { serverRuntimeConfig = {} } = getConfig() || {};
export const getStaticProps = function(){
return {
props: {
appVersion: serverRuntimeConfig.appVersion || '',
},
};
};
2.将版本号添加到redux store
state.app.appVersion
, 然后您可以稍后从浏览器控制台读取它:
window.__NEXT_REDUX_STORE__.getState().app.appVersion
package.json
中的版本号包含到 Next.js 应用程序中,您可以利用
next.config.js
配置文件将该版本公开为环境变量。此方法可确保仅向客户端公开版本号,从而避免因公开整个 package.json
文件而出现任何潜在的安全问题。具体操作方法如下:
next.config.js
:打开 Next.js 项目根目录下的 next.config.js
文件并添加以下代码。此代码从您的 package.json
读取版本并将其分配给名为 APP_VERSION
的环境变量。
// next.config.js
const packageJson = require('./package.json');
module.exports = {
env: {
APP_VERSION: packageJson.version,
},
};
process.env.APP_VERSION
在 Next.js 应用程序中的任何位置访问您的应用程序版本。例如,您可以在组件中显示版本号,如下所示:
// In a component, page or layout
const MyAppVersionComponent = () => {
return <div>App Version: {process.env.APP_VERSION}</div>;
};