reactjs - Uncaught ReferenceError: process არ არის განსაზღვრული vite-ის განახლების შემდეგ, რატომ?
მაქვს react/typescript აპლიკაცია და სანამ დავაახლოვებდი vite, მქონდა ეს გადაწყვეტა, რათა შემემოწმებინა, თუ env არის განვითარების ან წარმოების რეჟიმი ამ კოდის მიხედვით:
function getEnvironment(): "production" | "development" {
if (process.env.NODE_ENV === "production") {
return "production";
}
return "development";
}
type EnvUrl = { development: string; production: string };
const API_URL: EnvUrl = {
development: "http://localhost:5173/api/endpoint",
production: "https://ingress-url/api/endpoint",
};
export const apiUrl = API_URL[getEnvironment()];
მაგრამ როცა მე განვაახლე vite ვერსიაზე 3.1.0, მივიღე შეცდომა პროდაქშენის ბილდის სერვირების დროს შემდეგი შეცდომით: Uncaught ReferenceError: process is not defined.
მინი vite კონფიგურაცია არის:
import react from "@vitejs/plugin-react";
import { resolve } from "path";
import { rollupImportMapPlugin } from "rollup-plugin-import-map";
import { terser } from "rollup-plugin-terser";
import { ConfigEnv } from "vite";
import viteCompression from "vite-plugin-compression";
import cssInjectedByJsPlugin from "vite-plugin-css-injected-by-js";
import { viteMockServe } from "vite-plugin-mock";
import { UserConfigExport } from "vitest/config";
const reactUrl = "my-cdn-url/react/18/esm/index.js";
const reactDomUrl = "my-cdn-url/react-dom/18/esm/index.js";
const imports = {
react: reactUrl,
"react-dom": reactDomUrl,
};
export default ({ command }: ConfigEnv): UserConfigExport => ({
plugins: [
react(),
terser(),
cssInjectedByJsPlugin(),
viteCompression({
algorithm: "gzip",
}),
viteCompression({
algorithm: "brotliCompress",
}),
viteMockServe({
mockPath: "mock",
localEnabled: command === "serve",
}),
{
...rollupImportMapPlugin([{ imports }]),
enforce: "pre",
apply: "build",
},
],
build: {
lib: {
entry: resolve(__dirname, "src/Mikrofrontend.tsx"),
name: "sokos-attestasjon-frontend",
formats: ["es"],
fileName: () => `bundle.js`,
},
},
test: {
globals: true,
environment: "jsdom",
deps: {
inline: ["@testing-library/user-event"],
},
},
});
არსებობს სხვა გზა პრობლემის გამოსასწორებლად, თუ შევცვლი vite.config.js? თუ განახლების შემდეგ არსებობს სხვა გადაწყვეტა, რომელი რეკომენდებულია ისე, რომ ჩემი აპლიკაცია გაგრძელდეს მუშაობა ისე, როგორც ადრე?
გმადლობთ.
პასუხი #1
გამოიყენეთ import.meta.env.MODE რეჟიმის სტრინგის მისაღებად:
if (import.meta.env.MODE === "production") {
return "production";
}
ან უფრო მარტივად, გამოიყენეთ import.meta.env.PROD იმის შესამოწმებლად, თუ რა არის წარმოების რეჟიმის ლოგიკური მნიშვნელობა:
if (import.meta.env.PROD) {
return "production";
}
