Razzle: RFCprocess.env.RAZZLE_RUNTIME_XXXX

䜜成日 2018幎03月08日  Â·  27コメント  Â·  ゜ヌス: jaredpalmer/razzle

珟圚の動䜜

人々は、create-react-appず同じように、Razzleが.env倉数を凊理する方法぀たり、webpackによっお_build_時にそれらを文字列化するに苊劎しおいたす。

予想される行動

Razzleには、ランタむム倉数を尊重する方法が必芁です。これにより、ナヌザヌはアプリをNow / Heroku / Azureなどに簡単にデプロむできたす。

掚奚される解決策

PORT 、 HOST 、およびRAZZLE_RUNTIME_XXXXXXX始たるその他の環境倉数を実行時に䜿甚できるようにしたす。

前

コンパむル時に利甚可胜぀たり、webpackによっお文字列化されたす

  • RAZZLE_XXXXXX
  • PORT
  • HOST

埌

実行時に利甚可胜

  • PORT
  • HOST
  • RAZZLE_RUNTIME_XXXXXXX

コンパむル時に利甚可胜぀たり、webpackによっお文字列化されたす

  • RAZZLE_XXXXXX

議論

もう1぀の方法は、 razzle-herokuプラグむンのように、接頭蟞RAZZLE_XXXX倉数を_only_文字列化するこずです。 これも䞋䜍互換性がありたす。 䞀方では、これにより、Herokuが構成環境倉数に名前を付ける方法 MONGO_URI を簡単に操䜜できるようになりたす。 䞀方、これは偶然に混乱するのは簡単すぎたす぀たり、クラむアント䞊でundefinedである共有同圢コヌド内のランタむム倉数を参照したす...アプリケヌションを爆発させたす。

関連しおいる

527526514477356285

discussion

最も参考になるコメント

@jaredpalmer䜕かが足りないかもしれたせんが、readmeのドキュメントに瀺されおいるこずにもかかわらず、これはPORTなどの問題です。 process.env.MY_THINGは正垞に機胜したすが、 process.env.PORTはビルド時に眮き換えられ、実行時に読み取られたせん。 したがっお、Herokuの䟋は実際には機胜したせん。

このスレッドで説明されおいるように、PORT、HOSTなどの特別な凊理は芋られたせん。

党おのコメント27件

私は個人的に、process.envがクラむアントで利甚できないこずに぀いおあたり心配したせん。 'window'がサヌバヌで䜿甚できないこずをすでに知っおいる必芁がありたす。 process.envの動䜜が逆になるこずは私には理にかなっおいたす。 envを持぀ノヌドプロセスはなく、ブラりザヌは私が知っおいるenv倉数を公開したせん私はprocess.envをサヌバヌシヌクレットが終わる可胜性のある堎所だず考えおいるので、むしろそうだったず思いたすデフォルトでは、クラむアント偎では䜿甚できたせん。

それが私次第だった堎合、process.env.RAZZLE_INLINED_XXXXXX倉数はビルド䞭にコンパむルされそしおクラむアントではむンラむンDefinePluginの文字列ずしお利甚可胜、それ以倖のものはサヌバヌ偎でのみ利甚可胜になりたす。

NODE_ENVは、コヌドが実行されおいる環境のような倉数ではなく、ビルドの説明ずしお䞻に䜿甚されるため、むンラむン化するこずもできたす。これを行うには、パフォヌマンス䞊の理由もいく぀かありたす。

PORTずHOSTが実行時に可倉であるずいう考えが奜きです。 異なる環境で同じビルドアヌティファクトを実行しおいる可胜性がありたす。

闘争を確認するこずができたす。 珟圚の動䜜は私が期埅したものではなく、特にawsにupしおデプロむするずきに私を぀たずかせたした。 razzle.config.jsカスタマむズしお、すべおのrazzle固有の倉数の前にRAZZLE_XXXを付け、コンパむル時にそれらを文字列化するようにしたした。 残りはprocess.env.XXX利甚できたせん。 process.env介しおランタむム倉数が䜿甚できないこずに぀いおも@gregmartynに同意したす。

既存のReactプロゞェクトでRazzleをセットアップしようずしたずきに、この問題に盎面したした。 ポヌトは実行時にオヌバヌラむドできず、他のprocess.env倉数はサヌバヌで䜿甚できたせん。

ビルド時の珟圚の動䜜

process.env.PORT
process.env.NODE_ENV;
process.env.ASSETS_MANIFEST;
process.env.HOSTING_SET_VARIABLE;

クラむアントずサヌバヌの䞡方になりたす

3000;
'development';
'/Users/[...]/build/assets.json';
undefined;

これにより、クラむアントずサヌバヌがたったく同じプロセス環境を䜿甚できるようになりたすが、実行時にオヌバヌラむドしたり、他の環境倉数を䜿甚したりするこずはできなくなりたす。

完党な䞋䜍互換性が必芁な堎合は、ビルド時にこれにトランスパむルする必芁がありたすサヌバヌ䞊では、クラむアントは同じたたでかたいたせん。

process.env.PORT || 3000;
process.env.NODE_ENV || 'development';
process.env.ASSETS_MANIFEST || '/Users/[...]/build/assets.json';
process.env.HOSTING_SET_VARIABLE;

このようにしお、クラむアントずサヌバヌの䞡方でprocess.env.PORTを䜿甚できたす。 デフォルトは3000になりたす。

razzleがPORT=80で_built_の堎合、クラむアントはprocess.env.PORTを80にトランスパむルし、サヌバヌはそれをprocess.env.PORT || 80にトランスパむルしたす。 これにより、珟圚ず同じ動䜜になりたす。

razzleがPORT=81 _run_の堎合 80ビルドされおいる間、クラむアント環境倉数は80たたですが、サヌバヌ倉数は81たす。

もちろん、この動䜜は予期しない動䜜に぀ながる可胜性がありたすが、完党な䞋䜍互換性を維持しながら、process.envの最も柔軟な䜿甚法を提䟛したす。 ポヌトは実行時にサヌバヌ䞊で匕き続き䞊曞きでき、ホスティングプラットフォヌムによっお蚭定された他の環境倉数はサヌバヌ䞊でそのたた機胜したす。

ここでの根本的な問題は、Razzleが珟圚、耇数の異なる機胜を1぀のオブゞェクトにパックし、既存の機胜を根本的に倉曎しようずしおいるこずだず思いたす。

それはしようずしおいる

  1. パフォヌマンス䞊の理由から、process.env倉数を定数に倉換したすhttps://webpack.js.org/plugins/define-plugin/#usageの瞮小䟋ずhttps://github.com/nodejs/node/issuesのnodejsの速床䜎䞋を参照しおください。 / 3104
  2. これらの定数をサヌバヌずクラむアントの䞡方で䜿甚できるようにしお、アむ゜メコヌドの心配が少なくなるようにしたす。

問題

  • process.envは環境_倉数_甚です。 それを定数のセットに倉えるず、期埅される動䜜が倉わりたす。
  • process.envには、パスワヌドなどの機密情報が含たれおいるこずが倚いため、クラむアントず共有するデヌタの優れた゜ヌスではありたせん。 郚分的に共有され、郚分的に共有されおいない堎合、開発者は、この1぀process.envがネむティブのように動䜜しないだけでなく、キヌのプレフィックスによっおも動䜜が異なるこずを知っおいる必芁がありたす。
  • ビルド時に定数に倉換されたす。これは、他のコンテキストでの環境倉数の動䜜ずは異なりたす。 たずえば、Dockerは、ビルド時倉数ビルド自䜓が実行堎所に応じお倉数情報を必芁ずする堎合に圹立ちたすず環境倉数1぀のビルド枈みむメヌゞが異なる環境にデプロむされる堎合に圹立ちたすを区別したす。 Elastic Beanstalk、Heroku、他。 同じこずをする。
  • 提案された「RAZZLE_RUNTIME_」プレフィックスは自明ではありたせん。 クラむアント偎で利甚可胜であり、倉数ではないこずを䌝える必芁がありたす。 「INLINED_」はそれをカバヌしおいるず思いたす。むンラむン化は、ビルド時に発生する䜕かを指すために䞀般的に䜿甚されるためです。 完璧ではありたせんが "ISOMORPHIC_INLINED_"、短くしようずしおいたす。

私の奜みは、この機胜をさたざたな郚分に分割し、process.envをたったく改ざんしないこずです。
DefinePluginは、razzle.config.jsのようなファむルを呌び出しお、ビルド定数を取埗できたす。
ReduxがconfigureStorewindow .__ PRELOADED_STATE__で行うのず同様のパタヌンを䜿甚しお、サヌバヌからクラむアントにデヌタを枡すこずをお勧めしたす。

䞋䜍互換性のために、アップグレヌドノヌトは昔ながらの方法を定矩するサンプルrazzle.config.jsを提䟛するこずができたす。

補遺の1぀「process.envをたったく改ざんしないように」ず蚀いたした。 しかし、䞊蚘のコメントから、パフォヌマンス䞊の理由からprocess.env.NODE_ENVに䟋倖があり、「NODE_ENV」自䜓が䞀般的に「NODE_ENV =本番環境はこれが最適化されたビルドであるこずを意味する」ずいう意味を垯びおいるこずがわかりたした。

@gregmartynパフォヌマンスを最適化するためにNODE_ENVを蚭定し、珟圚機胜しおいるbabelプリセットを䜿甚する必芁がありたす。 envをいじる最初の理由は、プロゞェクトがすでに開始された埌にSSRが远加されるこずが倚いため、CRAからの移行をはるかに簡単にするこずでした。 他のプロゞェクトでもCRAを䜿甚しおいるため、ビルドツヌルがわずかに簡玠化されたす。

うん; NODE_ENVが有甚な䟋倖であるこずに同意したした。 それはそれ自䜓のものであり、ビルドず密接に関連しおいるので、驚くこずではありたせん。 カスタムSSR゜リュヌションからCRAをスキップしたので、CRAがどのように動䜜するかに぀いおはよくわかりたせん。 これもあちらの問題のようです https 

CRAアプリのランタむムコヌドはサヌバヌ䞊でたったく実行されないため、これはCRAよりもRazzleにずっお倧きな問題だず思いたす。 CRAは、クラむアント偎のコヌドに関する限り、それ以倖の堎合は空になるため、process.envを䜿甚しお必芁な凊理を実行できたす。 䞀方、RazzleはSSRのExpressを開始し、そのコヌドは、process.envがノヌドランタむム環境倉数のフルセットにアクセスできる通垞のセマンティクスを持っおいるこずを合理的に期埅したす。 Process.envはサヌバヌ䞊で実際の意味を持っおいるため、CRAが別のナヌスケヌスにそれを採甚したのは残念です。 「cra.inlines」のような「process.env」の代わりに他の名前を䜿甚するこずもできたす。 代わりに、同圢コヌドは、クラむアント偎のみを考慮した堎合に行われた決定に芋舞われたす。

RAZZLE_XXX環境倉数はすべおクラむアントで䜿甚可胜になっおいるこずに泚意しおください。

クラむアントに送信せずに機密性の高い環境倉数を䜿甚するにはどうすればよいですか

同圢コヌドで参照しない限り、クラむアントには送信されたせん。

@jaredpalmerおそらく、この問題はafterjsに固有のものですか 私はサヌバヌコヌドでそれらを参照しおいるだけです。

RAZZLEプレフィックスなしで環境倉数を定矩する機胜ぞの投祚を远加したいず思いたす。 少なくずも、サヌバヌ偎でprocess.envを消去しないでください。これにより、 dotenvを䜿甚しおサヌバヌ偎の環境倉数を読み蟌むこずができなくなりたす。 これは、アプリケヌション環境に぀いお行うにはあたりにも煩わしい仮定のようです。

razzleが珟圚どのように環境倉数をクラむアントずサヌバヌに泚入しおいるかに぀いおはよくわかりたせんが、クラむアントにサヌバヌ固有のものは必芁ないでしょう。 残念ながら、これは私にずっお今のずころ䞀皮の取匕砎りです。

同圢反応アプリの提案された゜リュヌションをhttps://github.com/jaredpalmer/razzle/issues/477#issuecomment-363538712から再投皿しおい

䞻な抂念は、ランタむム環境倉数を適切に蚭定するために、サヌバヌ実行の盎前に実行時に挿入されるコンパむル時にプレヌスホルダヌを䜿甚するこずです。 この゜リュヌションは、Dockerコンテナヌでサヌバヌを実行するためのものですが、おそらくこのRFCに適合させるこずができたす。

この゜リュヌションでは、RAZZLE_XXXX環境倉数が䞀臎し、HOST、PORT、およびREDIS_URLずずもに挿入されるこずに泚意しおください。


私は個人的にこの問題に苊劎しおおり、この問題の解決策を芋぀けるために数時間を費やしおいたす。

これはwebpackのコンパむルに固有のものであり、それ自䜓を驚かせるこずずは関係ありたせん。

create-react-appがこれをどのように凊理するかを調べ、2぀のプロゞェクト間でjavascriptずrubyコヌドを移怍した埌、次の゜リュヌションを䜿甚しお、razzletypescript反応アプリをherokuのDockerコンテナヌに正垞にデプロむしたした。

env.ts

このスクリプトは、ランタむム環境を凊理するためのモゞュヌルずしお䜿甚されたす。

export interface EnvironmentStore {
  NODE_ENV?: string;
  [key: string]: string | undefined;
}

// Capture environment as module variable to allow testing.
let compileTimeEnv: EnvironmentStore;
try {
  compileTimeEnv = process.env as EnvironmentStore;
} catch (error) {
  compileTimeEnv = {};
  // tslint:disable-next-line no-console
  console.log(
    '`process.env` is not defined. ' +
    'Compile-time environment will be empty.'
  );
}

// This template tag should be rendered/replaced with the environment in production.
// Padded to 4KB so that the data can be inserted without offsetting character
// indexes of the bundle (avoids breaking source maps).
/* tslint:disable:max-line-length */
const runtimeEnv = '{{RAZZLE_VARS_AS_BASE64_JSON__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________}}';
/* tslint:enable:max-line-length */

// A function returning the runtime environment, so that
// JSON parsing & errors occur at runtime instead of load time.
export const loadRuntimeEnv = (): EnvironmentStore => {
  let env;
  if (typeof env === 'undefined') {
    if (compileTimeEnv.NODE_ENV === 'production') {
      try {
        env = JSON.parse((Buffer.from(runtimeEnv.trim(), 'base64').toString()));
      } catch (error) {
        env = {};
        const overflowsMessage = runtimeEnv.slice(32, 33) !== null;
        // tslint:disable-next-line no-console
        console.error(
          'Runtime env vars cannot be parsed. Content is `%s`',
          runtimeEnv.slice(0, 31) + (overflowsMessage ? '
' : '')
        );
      }

    } else {
      env = compileTimeEnv;
    }
  }
  return env;
};

export default loadRuntimeEnv;

利甚方法

import { loadRuntimeEnv, EnvironmentStore } from './env';
const env: EnvironmentStore = loadRuntimeEnv();

const serverHost: string =env.RAZZLE_SERVER_HOST || 'localhost';

docker-start.js

このスクリプトは、server.jsの代わりに゚ントリポむントずしお䜿甚され、{{RAZZLE_VARS_AS_BASE64_JSON ___...}}プレヌスホヌダヌに実際のランタむム環境倉数を挿入するために䜿甚されたす。

require('newrelic');
const logger = require('heroku-logger');
const path = require('path');
const fs = require('fs');

const PLACEHOLDER = /\{\{RAZZLE_VARS_AS_BASE64_JSON_*?\}\}/;
const MATCHER = /^RAZZLE_/i;

const InjectableEnv = {

    inject: function(file, ...args) {

        const buffer = fs.readFileSync(file, { encoding: 'utf-8' });
        let injectee = buffer.toString();

        const matches = injectee.match(PLACEHOLDER);
        if (!matches) {
            return;
        }

        const placeholderSize = matches[0].length;

        let env = InjectableEnv.create(args);
        const envSize = env.length;
        const newPadding = placeholderSize - envSize;
        if (newPadding < 0) {
            console.log('You need to increase your placeholder size');
            process.exit();
        }
        const padding = Array(newPadding).join(' ');
        env = InjectableEnv.pad(padding, env);

        const injected = injectee.replace(PLACEHOLDER, env);

        fs.writeFileSync(file, injected, { encoding: 'utf-8' });
    },

    create: function() {

        const vars = Object.keys(process.env)
            .filter(key => MATCHER.test(key))
            .reduce((env, key) => {
                env[key] = process.env[key];
                return env;
            }, {});

        vars.NODE_ENV = process.env.NODE_ENV;

        if (typeof process.env.HOST !== 'undefined' && typeof vars.RAZZLE_SERVER_HOST === 'undefined') {
          vars.RAZZLE_SERVER_HOST = process.env.HOST;
        }

        if (typeof process.env.PORT !== 'undefined' && typeof vars.RAZZLE_SERVER_PORT === 'undefined') {
          vars.RAZZLE_SERVER_PORT = process.env.PORT;
        }

        if (typeof process.env.REDIS_URL !== 'undefined' && typeof vars.RAZZLE_REDIS_URL === 'undefined') {
          vars.RAZZLE_REDIS_URL = process.env.REDIS_URL;
        }

        return Buffer.from(JSON.stringify(vars)).toString('base64');
    },

    pad: function(pad, str, padLeft) {
        if (typeof str === 'undefined')
            return pad;
        if (padLeft) {
            return (pad + str).slice(-pad.length);
        } else {
            return (str + pad).substring(0, pad.length);
        }
    }
}

const root = process.cwd();
const serverBundle = path.resolve(path.join(root, '/build/server.js'));

if (fs.existsSync(serverBundle)) {
    logger.info('Injecting runtime env');
    InjectableEnv.inject(serverBundle);
    logger.info('Launching server instance');
    require(serverBundle);
}

Dockerfile

# You should always specify a full version here to ensure all of your developers
# are running the same version of Node.
FROM node:8.9.4

ENV NODE_ENV=production \
    REACT_BUNDLE_PATH=/static/js/vendor.js \
    PATH=/app/node_modules/.bin:$PATH \
    NPM_CONFIG_LOGLEVEL=warn

RUN curl -o- -L https://yarnpkg.com/install.sh | bash

# use changes to package.json to force Docker not to use the cache
# when we change our application's nodejs dependencies:
COPY package.json yarn.lock /tmp/
RUN cd /tmp \
  && yarn install --production=false --pure-lockfile \
  && mkdir -p /app \
  && cp -a /tmp/node_modules /app \
  && yarn cache clean \
  && rm -rf *.*

# From here we load our application's code in, therefore the previous docker
# "layer" thats been cached will be used if possible
WORKDIR /app
ADD . /app

RUN yarn build

EXPOSE 3000

CMD ["node", "docker-start.js"]

オヌバヌフロヌメッセヌゞの凊理は終了しおいたせんが、これがお圹に立おば幞いです。

参照

create-react-app甚のHerokuビルドパック
create-react-app甚のHerokuBuildpackの内郚レむダヌ

これはwebpackのコンパむルに固有のものであり、それ自䜓を驚かせるこずずは関係ありたせん。

RazzleはDefinePluginを蚭定するものです。 これはRazzleで解決できたす。

私はあなたの蚀っおいるこずに埓うず思いたす。 これが間違っおいるかどうか教えおくださいビルド時に、サヌバヌビルドのむンスタンスの起動時に文字列が眮き換えられるプレヌスホルダヌをprocess.envに配眮したす。 サヌバヌシヌクレットを凊理するためのものです。 クラむアントビルドでも実行できなかった理由はわかりたせんが問題HMRでは機胜したせん。 これはハックです-任意の4k境界を導入したす。 珟圚の圢匏では、クラむアントず共有する必芁のあるenv倉数には察応しおいたせん。これらはビルド時定数のたたです。 これは、コンテナヌの远加の起動ステップです。

https://github.com/jaredpalmer/razzle/issues/528#issuecomment-377058844で私が蚀ったこずの倚くを再ハッシュするには

解決策は、RazzleずCRAが本来あるべきよりも倚くの機胜をprocess.envに詰め蟌もうずしおいるこずを認識するこずだず思いたす。 Dockerで動䜜させるために、静的ビルド時間ず動的ここでは、コンテナヌの開始時間、シヌクレットず非シヌクレットの4぀の可胜な状態のいずれかを持぀フィヌルドを持぀1぀のオブゞェクトを䜜成しようずしおいたす。 これらの4぀の状態すべおprocess.env.STATIC_PRIVATE_X、process.env.DYNAMIC_PUBLIC_Y、...のプレフィックスを思い付くこずができたすが、よりクリヌンな゜リュヌションを䜿甚した方がはるかに良いず思いたす。

process.envがネむティブのようにサヌバヌシヌクレットのストアずしお動䜜する堎合、物事ははるかに理解しやすくなりたす。 䟋倖が1぀ありたす。ビルド時のむンラむンずしおのNODE_ENVですが、ビルドのプロパティであるため、これで問題ありたせん。 実行時にNODE_ENVを蚭定しおも意味がありたせん。

残っおいるのは、クラむアントにデヌタを取埗する方法だけです。 なぜこれがprocess.envを䜿甚しおいるのかたったくわかりたせん。 静的なものにたずえばrazzle.build.Xを䜿甚しお、reduxず同じように動的なものをクラむアントに枡しおみたせんか

Nodeでprocess.envが遅いずいう別の問題がありたすが、これはprocess.envを1回読み取るキャッシュレむダヌで察凊するのが最適です。

@gregmartynこれはハックであるこずに同意したす...そしおそれは任意の4K境界を導入したす。 このアむデアは、珟圚CRAで行われおいるこず投皿されたリファレンスを参照に基づいおおり、サヌバヌ偎のランタむム環境倉数を察象ずしおいたす。

この問題のこの根源に圹立぀ず私が信じるPRを

たた、 PORTずHOSTも、サヌバヌのコンパむル時にそのたたにしおおくのが理想的であるこずに同意したす。

@tgriesserいいね それは倧きな改善です。
PORTずHOSTに加えお、コンパむルしない倉数のリストにPUBLIC_PATHを远加したす。

私はただ敏感なカスタム環境倉数がすべおクラむアントにコンパむルされおいるのを芋぀けおいたす。 server.jsでのみ参照しおいホットロヌダヌのためにその同型を考慮したすか これらがクラむアントに到達するのを防ぐにはどうすればよいですか。

みなさん、今週は仕事でこれらすべおに取り組んでいたす。 乞うご期埅。 611はマヌゞされる可胜性がありたす。

config.jsを䜿甚したreadmeの新しいガむドに埓うこずで、バンドルから機密性の高い環境倉数を削陀するこずができたした。 玠晎らしいD

v2ノヌトを参照しおください

@jaredpalmer䜕かが足りないかもしれたせんが、readmeのドキュメントに瀺されおいるこずにもかかわらず、これはPORTなどの問題です。 process.env.MY_THINGは正垞に機胜したすが、 process.env.PORTはビルド時に眮き換えられ、実行時に読み取られたせん。 したがっお、Herokuの䟋は実際には機胜したせん。

このスレッドで説明されおいるように、PORT、HOSTなどの特別な凊理は芋られたせん。

PORTを実倉数にするこずも581によっおブロックされるこずに泚意しおください。 それをパッチしお、PORTを機胜させるためにPORTを削陀するDefinePlugin配列を䜜成するrazzle.config.jsを䜿甚する必芁がありたす。 しかし、それは機胜したす

実行時に.env倉数を䜿甚したい堎合は、この小さなパッケヌゞを䜿甚しおください。
https://www.npmjs.com/package/razzle-plugin-runtimeenv

誰かがAzureにRazzleアプリをデプロむする方法をアドバむスできたすか 本圓に苊劎しおいたす。

実行時に.env倉数を䜿甚したい堎合は、この小さなパッケヌゞを䜿甚しおください。
https://www.npmjs.com/package/razzle-plugin-runtimeenv

それはどのように機胜したすか 䟋を挙げおいただけたすか

確かに、環境倉数は実行時に泚入する必芁があるず思いたす。 razzleアプリをコンテむン化する堎合は、実行する環境ずは関係なくむメヌゞを䜜成し、サヌバヌの起動時に環境倉数を読み取っお、クラむアントアプリに提䟛したす。

他のアプロヌチでは、ビルド時にのみ発生するため、実際には環境倉数を䜿甚しおいたせん。

私がここで述べたように
https://github.com/HamidTanhaei/razzle-plugin-runtime/issues/1#issuecomment -525731273

実行時に.envファむルず.env.developmentファむルをrazzle-plugin-runtime䜿甚できたす。 実行時にアプリで環境倉数を䜿甚する機胜が远加されたす。

たずえば、私はそれを䜿甚しおaxiosたす
axios.defaults.baseURL = $ {process.env.RAZZLE_APP_API_BASE_PATH} $ {process.env.RAZZLE_APP_API_VERSION} ;
そしお、次のように本番甚の本番ENV倉数を提䟛できたす。
https://github.com/jaredpalmer/razzle#adding -temporary-environment-variables-in-your-shell

誰かがAzureにRazzleアプリをデプロむする方法をアドバむスできたすか 本圓に苊劎しおいたす。

私はで@fabianishereで共有゜リュヌションを䜿甚しおAzureのポヌトの問題を解決しhttps://github.com/jaredpalmer/razzle/issues/906#issuecomment -467046269

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡