Przekazywanie zmiennych zależnych od środowiska w pakiecie internetowym


306

Próbuję przekonwertować aplikację kątową z gulp na webpack. w gulp używam gulp-preprocess do zamiany niektórych zmiennych na stronie HTML (np. nazwa bazy danych) w zależności od NODE_ENV. Jaki jest najlepszy sposób na osiągnięcie podobnego rezultatu z webpackiem?


1
Czy alias działał dla Ciebie?
Juho Vepsäläinen

1
@brawraw: zanim udało mi się omijać aliasy, zaimplementowałem inne rozwiązanie, które zasugerowałeś, oparte na DefinePlugin (). Widzę teraz, że alias byłby lepszym rozwiązaniem i prawdopodobnie kiedyś dokona refaktoryzacji - dzięki. Jeśli chcesz dołączyć swoje dwa rozwiązania do odpowiedzi, chętnie je zaakceptuję.
kpg

2
Został skierowany tutaj za pomocą komunikatu konsoli. Jak to naprawić w Browserify?
GN.

2
Czy to pytanie próbuje skonfigurować SPA podczas kompilacji lub ładowania? Zwracam uwagę na dwa typy konfiguracji dla OSO: 1) tryb programowania lub produkcji oraz 2) środowisko wdrażania, np. Programowanie, przemieszczanie, produkcja. Myślę, że NODE_ENV może zostać użyty do skonfigurowania (1) w czasie kompilacji, ale jak skonfigurować (2) przy wdrożeniu, np. Konfigurowanie trybu produkcyjnego dla różnych środowisk wdrażania Mam nadzieję, że ma to związek z tym pytaniem.
Ashley Aitken

1
@AshleyAitken Świetne pytanie, na które nie mogłem znaleźć odpowiedzi w tym wątku (być może mi go brakowało), ale opublikowałem ten nowy wątek: stackoverflow.com/questions/44464504/...
David Tesar

Odpowiedzi:


427

Istnieją dwa podstawowe sposoby osiągnięcia tego celu.

DefinePlugin

new webpack.DefinePlugin({
    'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development')
}),

Pamiętaj, że spowoduje to zastąpienie dopasowań „jak jest”. Dlatego łańcuch ma format, w którym jest. Możesz mieć bardziej złożoną strukturę, na przykład obiekt, ale masz pomysł.

EnvironmentPlugin

new webpack.EnvironmentPlugin(['NODE_ENV'])

EnvironmentPluginużywa DefinePluginwewnętrznie i mapuje wartości środowiska, aby je zakodować. Składnia Terser.

Alias

Alternatywnie możesz zużyć konfigurację za pośrednictwem modułu aliasowego . Od strony konsumenta wyglądałoby to tak:

var config = require('config');

Sama konfiguracja może wyglądać następująco:

resolve: {
    alias: {
        config: path.join(__dirname, 'config', process.env.NODE_ENV)
    }
}

Powiedzmy, że process.env.NODE_ENVjest development. To by się ./config/development.jswtedy odwzorowało . Moduł, na który mapuje, może eksportować konfigurację w następujący sposób:

module.exports = {
    testing: 'something',
    ...
};

3
Dziękujemy za zwrócenie uwagi na fakt, że zastępuje dopasowania „jak jest”. Przez chwilę starałem się zrozumieć, dlaczego mój kod JSON.stringify()
generuje

4
Jeśli używasz ES2015, możesz także użyć interpolacji ciągów -'process.env.NODE_ENV': `"${process.env.NODE_ENV || 'development'}"`
user2688473

1
@ tybro0103 JSON.stringify('development')as może nie być naprawdę przydatny. Zamiast tego JSON.stringify(someVariable)może być całkiem!
superjos,

1
Powinieneś NODE_ENVto zrobić. Jak to ustawić, zależy od twojej platformy.
Juho Vepsäläinen,

1
@AnyulRivas Tak. React używa process.env.NODE_ENVwzoru i działa.
Juho Vepsäläinen

109

Kolejna opcja, jeśli chcesz korzystać tylko z interfejsu cli, po prostu skorzystaj z defineopcji webpack. Dodaję następujący skrypt w moim package.json:

"build-production": "webpack -p --define process.env.NODE_ENV='\"production\"' --progress --colors"

Więc po prostu muszę biec npm run build-production.


2
Czy jest na to dokumentacja? Nie mogę Google - zdefiniować :(
Richard,

5
Dla webpack @ 2 „-p” jest już skrótem do --optimize-minimize --define process.env.NODE_ENV = „produkcja”
okm

@okm Docs wzmianka -p Równa się - --optymalizuj-minimalizuj - optymalizuj-występowanie-zamówienia, więc nie wspominaj o --define process.env.NODE_ENV = „produkcja”. Czy to coś, co zostało usunięte?
Nader Ghanbari

1
@NaderHadjiGhanbari Jest w wersji webpack
okm

73

Zbadałem kilka opcji ustawiania zmiennych specyficznych dla środowiska i skończyłem z tym:

Obecnie mam 2 konfiguracje pakietu webpack:

webpack.production.config.js

new webpack.DefinePlugin({
  'process.env':{
    'NODE_ENV': JSON.stringify('production'),
    'API_URL': JSON.stringify('http://localhost:8080/bands')
  }
}),

webpack.config.js

new webpack.DefinePlugin({
  'process.env':{
    'NODE_ENV': JSON.stringify('development'),
    'API_URL': JSON.stringify('http://10.10.10.10:8080/bands')
  }
}),

W moim kodzie otrzymuję wartość API_URL w ten (krótki) sposób:

const apiUrl = process.env.API_URL;

EDYCJA 3 listopada 2016 r

Dokumenty pakietu Webpack zawierają przykład: https://webpack.js.org/plugins/define-plugin/#usage

new webpack.DefinePlugin({
    PRODUCTION: JSON.stringify(true),
    VERSION: JSON.stringify("5fa3b9"),
    BROWSER_SUPPORTS_HTML5: true,
    TWO: "1+1",
    "typeof window": JSON.stringify("object")
})

W ESLint musisz w szczególności zezwalać na niezdefiniowane zmienne w kodzie, jeśli masz no-undefwłączone reguły. http://eslint.org/docs/rules/no-undef jak to:

/*global TWO*/
console.log('Running App version ' + TWO);

EDYCJA 7 września 2017 r. (Specyficzne dla aplikacji Create-React-App)

Jeśli nie chcesz zbyt wiele konfigurować, sprawdź Create-React-App: Create-React-App - Dodawanie niestandardowych zmiennych środowiskowych . Pod maską CRA i tak korzysta z Webpacka.


2
Czy zauważyłeś, że zapobiegło to przekazaniu zmiennych środowiskowych w czasie wykonywania? Jeśli zastąpisz całość, process.envto process.env.PORTna przykład nie zostanie rozwiązane undefinedpodczas kompilacji pakietu internetowego, co oznacza, że ​​nie możesz już zastąpić portu ze środowiska?
djskinner,

Dzięki wielkie. Wreszcie odpowiedź na to pytanie, która jest zrozumiała!
Dave Sag

co to jest proces skąd on pochodzi? jeśli jest to obiekt węzła, w jaki sposób dostaje się do przeglądarki?
Daniel Birowsky Popeski,

To okropne rozwiązanie, masz dwa pliki webpack.config prawie całkowicie identyczne, z wyjątkiem ustawienia NODE_ENV i API_URL
Brian Ogden

1
@BrianOgden Tak, to prawda, powinieneś użyć do tego czegoś takiego jak webpack-merge: npmjs.com/package/webpack-merge - To trochę poza zakresem tego pytania IMO.
thevangelist

24

Możesz przekazać dowolny argument wiersza poleceń bez dodatkowych wtyczek przy użyciu --envod webpacka 2:

webpack --config webpack.config.js --env.foo=bar

Za pomocą zmiennej w pliku webpack.config.js:

module.exports = function(env) {
    if (env.foo === 'bar') {
        // do something
    }
}

Źródło


22

Możesz użyć bezpośrednio z EnvironmentPlugindostępnych w, webpackaby mieć dostęp do dowolnej zmiennej środowiskowej podczas transpilacji.

Musisz tylko zadeklarować wtyczkę w swoim webpack.config.jspliku:

var webpack = require('webpack');

module.exports = {
    /* ... */
    plugins = [
        new webpack.EnvironmentPlugin(['NODE_ENV'])
    ]
};

Pamiętaj, że musisz jawnie zadeklarować nazwę zmiennych środowiskowych, których chcesz użyć.


4
W dokumentacji pakietu Webpack znajduje się przykład z tym przypadkiem użycia. github.com/webpack/docs/wiki/list-of-plugins#environmentplugin
Technetium

1
Jeśli chcesz umieścić zmienne środowiskowe w pliku .env, możesz użyć pakietu dotenv i zainicjować go w pliku webpack.config.js. npmjs.com/package/dotenv
Justin McCandless

13

Aby osobiście dodać do szeregu odpowiedzi, wolę:

const webpack = require('webpack');
const prod = process.argv.indexOf('-p') !== -1;

module.exports = {
  ...
  plugins: [
    new webpack.DefinePlugin({
      process: {
        env: {
          NODE_ENV: prod? `"production"`: '"development"'
        }
      }
    }),
    ...
  ]
};

Używając tego, nie ma żadnych funky zmiennych env ani problemów międzyplatformowych (w przypadku zmiennych env). Wszystko, co robisz, to uruchamianie normalnie webpacklub odpowiednio webpack -pdla deweloperów lub produkcji.

Odniesienie: Problem Github


Przy określaniu wartości dla procesu wolą 'process.env.NODE_ENV': JSON.stringify('production')ponad process: { env: { NODE_ENV: JSON.stringify('production') } }. Użycie tego drugiego spowoduje zastąpienie obiektu procesu, co może zepsuć zgodność z niektórymi modułami, które oczekują, że zostaną zdefiniowane inne wartości w obiekcie procesu.
slorenzo

13

Ponieważ moja edycja powyższego postu przez ewangelistę nie została zatwierdzona , zamieszczam dodatkowe informacje.

Jeśli chcesz wybrać wartość z pliku package.json jak zdefiniowany numer wersji i uzyskać do niej dostęp za pośrednictwem DefinePlugin w JavaScript.

{"version": "0.0.1"}

Następnie importu package.json wewnątrz odpowiedniego webpack.config , dostęp atrybut użyciu zmiennej importu, a następnie za pomocą atrybutu w DefinePlugin .

const PACKAGE = require('../package.json');
const _version = PACKAGE.version;//Picks the version number from package.json

Na przykład niektóre konfiguracje w pliku webpack.config używają METADANE dla DefinePlugin:

const METADATA = webpackMerge(commonConfig({env: ENV}).metadata, {
  host: HOST,
  port: PORT,
  ENV: ENV,
  HMR: HMR,
  RELEASE_VERSION:_version//Version attribute retrieved from package.json
});

new DefinePlugin({
        'ENV': JSON.stringify(METADATA.ENV),
        'HMR': METADATA.HMR,
        'process.env': {
          'ENV': JSON.stringify(METADATA.ENV),
          'NODE_ENV': JSON.stringify(METADATA.ENV),
          'HMR': METADATA.HMR,
          'VERSION': JSON.stringify(METADATA.RELEASE_VERSION)//Setting it for the Scripts usage.
        }
      }),

Dostęp do tego w dowolnym pliku maszynopisu:

this.versionNumber = process.env.VERSION;

Najmądrzejszy sposób wyglądałby następująco:

// webpack.config.js
plugins: [
    new webpack.DefinePlugin({
      VERSION: JSON.stringify(require("./package.json").version)
    })
  ]

Dzięki Ross Allen


11

Kolejna odpowiedź podobna do odpowiedzi @ zer0chain. Jednak z jednym wyróżnieniem.

Ustawienie webpack -pjest wystarczające.

Jest taki sam jak:

--define process.env.NODE_ENV="production"

I to jest to samo co

// webpack.config.js
const webpack = require('webpack');

module.exports = {
  //...

  plugins:[
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify('production')
    })
  ]
};

Dlatego może być potrzebne tylko coś takiego w package.jsonpliku węzła:

{
  "name": "projectname",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "debug": "webpack -d",
    "production": "webpack -p"
  },
  "author": "prosti",
  "license": "ISC",
  "dependencies": {    
    "webpack": "^2.2.1",
    ...
  }
}

Kilka wskazówek z DefinePlugin :

DefinePlugin pozwala tworzyć globalne stałe, które można konfigurować podczas kompilacji. Może to być przydatne do umożliwienia różnych zachowań między kompilacjami programistycznymi i kompilacjami wydań. Na przykład możesz użyć stałej globalnej, aby ustalić, czy rejestrowanie ma miejsce; być może wykonujesz logowanie w kompilacji programistycznej, ale nie w kompilacji wersji. Taki scenariusz ułatwia DefinePlugin.


To dlatego możesz sprawdzić, czy piszesz webpack --help

Config options:
  --config  Path to the config file
                         [string] [default: webpack.config.js or webpackfile.js]
  --env     Enviroment passed to the config, when it is a function

Basic options:
  --context    The root directory for resolving entry point and stats
                                       [string] [default: The current directory]
  --entry      The entry point                                          [string]
  --watch, -w  Watch the filesystem for changes                        [boolean]
  --debug      Switch loaders to debug mode                            [boolean]
  --devtool    Enable devtool for better debugging experience (Example:
               --devtool eval-cheap-module-source-map)                  [string]
  -d           shortcut for --debug --devtool eval-cheap-module-source-map
               --output-pathinfo                                       [boolean]
  -p           shortcut for --optimize-minimize --define
               process.env.NODE_ENV="production" 

                      [boolean]
  --progress   Print compilation progress in percentage                [boolean]

3

Aby dodać do zestawu odpowiedzi:

Użyj ExtendedDefinePlugin zamiast DefinePlugin

npm install extended-define-webpack-plugin --save-dev.

ExtendedDefinePlugin jest znacznie prostszy w użyciu i jest udokumentowany :-) link

Ponieważ DefinePlugin nie ma dobrej dokumentacji, chcę pomóc, mówiąc, że faktycznie działa jak #DEFINE in c # .

#if (DEBUG)
        Console.WriteLine("Debugging is enabled.");
#endif

Dlatego jeśli chcesz zrozumieć, jak działa DefinePlugin, przeczytaj c #define Doucmentation. połączyć


2

Wolę używać pliku .env dla innego środowiska.

  1. Użyj webpack.dev.config, aby skopiować env.devdo .env do folderu głównego
  2. Użyj webpack.prod.config, aby skopiować env.prodna .env

i w kodzie

posługiwać się

require('dotenv').config(); const API = process.env.API ## which will store the value from .env file


2

Znalazłem następujące rozwiązanie, które jest najłatwiejsze do ustawienia zmiennej środowiskowej dla Webpack 2:

Na przykład mamy ustawienia pakietu internetowego:

var webpack = require('webpack')

let webpackConfig = (env) => { // Passing envirmonment through
                                // function is important here
    return {
        entry: {
        // entries
        },

        output: {
        // outputs
        },

        plugins: [
        // plugins
        ],

        module: {
        // modules
        },

        resolve: {
        // resolves
        }

    }
};

module.exports = webpackConfig;

Dodaj zmienną środowiskową w pakiecie internetowym:

plugins: [
    new webpack.EnvironmentPlugin({
       NODE_ENV: 'development',
       }),
]

Zdefiniuj zmienną wtyczki i dodaj ją do plugins:

    new webpack.DefinePlugin({
        'NODE_ENV': JSON.stringify(env.NODE_ENV || 'development')
    }),

Teraz po uruchomieniu polecenia webpack podaj env.NODE_ENVjako argument:

webpack --env.NODE_ENV=development

// OR

webpack --env.NODE_ENV development

Teraz możesz uzyskać dostęp do NODE_ENVzmiennej w dowolnym miejscu w kodzie.



1

Oto sposób, który zadziałał dla mnie i pozwolił mi zachować zmienne środowiskowe w stanie DRY poprzez ponowne użycie pliku json.

const webpack = require('webpack');
let config = require('./settings.json');
if (__PROD__) {
    config = require('./settings-prod.json');
}

const envVars = {};
Object.keys(config).forEach((key) => {
    envVars[key] = JSON.stringify(config[key]);
});

new webpack.DefinePlugin({
    'process.env': envVars
}),

0

Nie jestem wielkim fanem ...

new webpack.DefinePlugin({
  'process.env': envVars
}),

... ponieważ nie zapewnia żadnego rodzaju bezpieczeństwa. zamiast tego poprawiasz swoje tajne rzeczy, chyba że dodasz webpack do gitignore 🤷‍♀️ istnieje lepsze rozwiązanie.

Zasadniczo w tej konfiguracji po skompilowaniu kodu wszystkie zmienne env procesu zostaną usunięte z całego kodu, nie będzie jednego procesu. Na szczęście VAR w górę dzięki wtyczce babel transform-inline-environment-variables PS, jeśli nie chcesz skończyć z całą masą niezdefiniowanych, upewnij się, że wywołujesz env.js, zanim webpack wywoła babel-loader, dlatego jest to pierwsza rzecz, którą wywołuje webpack. tablica vars w pliku babel.config.js musi pasować do obiektu w env.js. teraz jest tylko jedna rzecz do koszenia. dodaj .envplik umieść tam wszystkie zmienne env, plik musi znajdować się w katalogu głównym projektu lub możesz go dodać gdziekolwiek chcesz, po prostu upewnij się, że ustawiłeś tę samą lokalizację w pliku env.js, a także dodaj go do gitignore

const dotFiles = ['.env'].filter(Boolean);

if (existsSync(dotFiles)) {
    require("dotenv-expand")(require("dotenv").config((dotFiles)));
}

Jeśli chcesz zobaczyć cały babel + webpack + ts, zdobądź go z heaw https://github.com/EnetoJara/Node-typescript-babel-webpack.git

i ta sama logika dotyczy reakcji i wszystkich innych 💩

config
---webpack.js
---env.js
src
---source code world
.env
bunch of dotFiles

env.js

"use strict";
/***
I took the main idea from CRA, but mine is more cooler xD
*/
const {realpathSync, existsSync} = require('fs');
const {resolve, isAbsolute, delimiter} = require('path');

const NODE_ENV = process.env.NODE_ENV || "development";

const appDirectory = realpathSync(process.cwd());

if (typeof NODE_ENV !== "string") {
    throw new Error("falle and stuff");
}

const dotFiles = ['.env'].filter(Boolean);

if (existsSync(dotFiles)) {
    require("dotenv-expand")(require("dotenv").config((dotFiles)));
}

process.env.NODE_PATH = (process.env.NODE_PATH || "")
    .split(delimiter)
    .filter(folder => folder && isAbsolute(folder))
    .map(folder => resolve(appDirectory, folder))
    .join(delimiter);

const ENETO_APP = /^ENETO_APP_/i;

module.exports = (function () {
    const raw = Object.keys ( process.env )
        .filter ( key => ENETO_APP.test ( key ) )
        .reduce ( ( env, key ) => {
                env[ key ] = process.env[ key ];
                return env;
            },
            {
                BABEL_ENV: process.env.ENETO_APP_BABEL_ENV,
                ENETO_APP_DB_NAME: process.env.ENETO_APP_DB_NAME,
                ENETO_APP_DB_PASSWORD: process.env.ENETO_APP_DB_PASSWORD,
                ENETO_APP_DB_USER: process.env.ENETO_APP_DB_USER,
                GENERATE_SOURCEMAP: process.env.ENETO_APP_GENERATE_SOURCEMAP,
                NODE_ENV: process.env.ENETO_APP_NODE_ENV,
                PORT: process.env.ENETO_APP_PORT,
                PUBLIC_URL: "/"
            } );

    const stringyField = {
        "process.env": Object.keys(raw).reduce((env, key)=> {
            env[key]=JSON.stringify(raw[key]);
            return env;
        },{}),

    };

    return {
        raw, stringyField
    }
})();

plik webpack bez wtyczek troll

"use strict";

require("core-js");
require("./env.js");

const path = require("path");
const nodeExternals = require("webpack-node-externals");

module.exports = env => {
    return {
        devtool: "source-map",
        entry: path.join(__dirname, '../src/dev.ts'),
        externals: [nodeExternals()],
        module: {
            rules: [
                {
                    exclude: /node_modules/,
                    test: /\.ts$/,
                    use: [
                        {
                            loader: "babel-loader",
                        },
                        {
                            loader: "ts-loader"
                        }
                    ],
                },
                {
                    test: /\.(png|jpg|gif)$/,
                    use: [
                        {
                            loader: "file-loader",
                        },
                    ],
                },
            ],
        },
        node: {
            __dirname: false,
            __filename: false,
        },
        optimization: {
            splitChunks: {
                automaticNameDelimiter: "_",
                cacheGroups: {
                    vendor: {
                        chunks: "initial",
                        minChunks: 2,
                        name: "vendor",
                        test: /[\\/]node_modules[\\/]/,
                    },
                },
            },
        },
        output: {
            chunkFilename: "main.chunk.js",
            filename: "name-bundle.js",
            libraryTarget: "commonjs2",
        },
        plugins: [],
        resolve: {
            extensions: ['.ts', '.js']
        }   ,
        target: "node"
    };
};

babel.config.js

module.exports = api => {

    api.cache(() => process.env.NODE_ENV);

    return {

        plugins: [
            ["@babel/plugin-proposal-decorators", { legacy: true }],
            ["@babel/plugin-transform-classes", {loose: true}],
            ["@babel/plugin-external-helpers"],
            ["@babel/plugin-transform-runtime"],
            ["@babel/plugin-transform-modules-commonjs"],
            ["transform-member-expression-literals"],
            ["transform-property-literals"],
            ["@babel/plugin-transform-reserved-words"],
            ["@babel/plugin-transform-property-mutators"],
            ["@babel/plugin-transform-arrow-functions"],
            ["@babel/plugin-transform-block-scoped-functions"],
            [
                "@babel/plugin-transform-async-to-generator",
                {
                    method: "coroutine",
                    module: "bluebird",
                },
            ],
            ["@babel/plugin-proposal-async-generator-functions"],
            ["@babel/plugin-transform-block-scoping"],
            ["@babel/plugin-transform-computed-properties"],
            ["@babel/plugin-transform-destructuring"],
            ["@babel/plugin-transform-duplicate-keys"],
            ["@babel/plugin-transform-for-of"],
            ["@babel/plugin-transform-function-name"],
            ["@babel/plugin-transform-literals"],
            ["@babel/plugin-transform-object-super"],
            ["@babel/plugin-transform-shorthand-properties"],
            ["@babel/plugin-transform-spread"],
            ["@babel/plugin-transform-template-literals"],
            ["@babel/plugin-transform-exponentiation-operator"],
            ["@babel/plugin-proposal-object-rest-spread"],
            ["@babel/plugin-proposal-do-expressions"],
            ["@babel/plugin-proposal-export-default-from"],
            ["@babel/plugin-proposal-export-namespace-from"],
            ["@babel/plugin-proposal-logical-assignment-operators"],
            ["@babel/plugin-proposal-throw-expressions"],
            [
                "transform-inline-environment-variables",
                {
                    include: [
                        "ENETO_APP_PORT",
                        "ENETO_APP_NODE_ENV",
                        "ENETO_APP_BABEL_ENV",
                        "ENETO_APP_DB_NAME",
                        "ENETO_APP_DB_USER",
                        "ENETO_APP_DB_PASSWORD",
                    ],
                },
            ],
        ],
        presets: [["@babel/preset-env",{
            targets: {
                node: "current",
                esmodules: true
            },
            useBuiltIns: 'entry',
            corejs: 2,
            modules: "cjs"
        }],"@babel/preset-typescript"],
    };
};

„W końcu wzmacniasz swoje tajne rzeczy, chyba że dodasz paczkę do gitignore.” @ Ernesto, czy możesz w ogóle to rozwinąć?
Katie Byers,

Zasadniczo twój pakiet kończy się bez procesu.env.BLAHBLAH i podaje rzeczywistą wartość. Na przykład zamiast procesu.env.NODE_ENV kończysz na „produkcji”, to znaczy nie jest to najlepszy przykład, ale wyobraź sobie tajny klucz. Twój pakiet będzie miał rzeczywistą wartość i kto wie, co oznacza ten sznur przewodowy 🤷‍♀️
Ernesto

Hmmm - tak, te wartości będą interpolowane w wersji wbudowanej , ale przypuszczalnie nie popychasz tego do GitHub ...
Katie Byers

-4

Nie wiem dlaczego, ale tak naprawdę nikt nie wspomina o najprostszym rozwiązaniu. To działa dla mnie na nodejs i chrząknięcie. Ponieważ dla wielu osób webpack może być mylący, możesz po prostu użyć poniższej linii:

process.env.NODE_ENV = 'production';

Dzięki powyższemu rozwiązaniu tak naprawdę nie musisz używać envify ani webpacka. Czasami proste zakodowane rozwiązanie może działać dla niektórych osób.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.