2

在使用 Now 部署我的项目时,我试图将 Sanity 令牌存储为秘密,但这一切似乎都不起作用。这是我的情况:

  1. 我将我的理智令牌作为秘密添加到 CLI(我称之为sanity_token)。

  2. now.json我在项目的根目录中添加了一个文件:

    {
        "version": 1,    
        "build": {
            "env": {
                "SANITY_TOKEN": "@sanity_token"
            }
        },    
        "env": {
            "SANITY_TOKEN": "@sanity_token"
        }            
    }```
    
  3. 我在 as 中使用了变量sanity.js

    ...
    token: process.env.SANITY_TOKEN,
    ...
    

...但它似乎在运行npm run dev或部署时都不起作用now。页面被加载并且没有错误,但我没有内容,因为无法达到理智。好像这个秘密不见了。我可能做错了什么?

4

1 回答 1

1

为此,您可以使用 Next 的运行时配置。由于您正在处理秘密令牌,因此您将希望使用serverRuntimeConfig 仅在服务器端可用的令牌:

// next.config.js
module.exports = {
  serverRuntimeConfig: {
    // either inline or get from env variable
    SANITY_TOKEN: process.env.SANITY_TOKEN,
    SANITY_TOKEN: "alternatively stored in this file"
  }
}

在您的服务器端 coe 中,您可以SANITY_TOKEN像这样访问:

// server-side only
import getConfig from "next/config";
const { SANITY_TOKEN } = getConfig().serverRuntimeConfig;

但是,如果您尝试在客户端运行此代码会崩溃,因此您必须确保它仅在服务器上运行 (另请参阅此问题)。


请注意,您的文件让您可以控制在部署到 ZEIT Now 时now.json使用哪些环境变量,但不会影响您的本地构建(例如和)。$ npm run dev$ npm run build

因此,在本地运行 Next 时,您必须以其他方式设置 env 变量。

于 2019-07-27T21:57:33.600 回答