quasarframework / quasar

Quasar Framework - Build high-performance VueJS user interfaces in record time

Home Page:https://quasar.dev

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

process.env not working on build (app-vite-v2.0.0-beta.1)

diadal opened this issue · comments

What happened?

all process.env values return undefined only on pro mode quasar b but working on dev mode quasar d

What did you expect to happen?

should work the same way as the dev mode work

Reproduction URL

no link

How to reproduce?

run this quasar b

Flavour

Quasar CLI with Vite (@quasar/cli | @quasar/app-vite)

Areas

SPA Mode, Capacitor Mode

Platforms/Browsers

Firefox, Chrome, Safari, iOS, Android

Quasar info output

Operating System - Darwin(23.2.0) - darwin/arm64
NodeJs - 20.11.0

Global packages
  NPM - 10.2.4
  yarn - 1.22.21
  @quasar/cli - 2.3.0
  @quasar/icongenie - 3.1.1
  cordova - Not installed

Important local packages
  quasar - 2.14.3 -- Build high-performance VueJS user interfaces (SPA, PWA, SSR, Mobile and Desktop) in record time
  @quasar/app-vite - 2.0.0-beta.1 -- Quasar Framework App CLI with Vite
  @quasar/extras - 1.16.9 -- Quasar Framework fonts, icons and animations
  eslint-plugin-quasar - Not installed
  vue - 3.4.18 -- The progressive JavaScript framework for building modern web UI.
  vue-router - 4.2.5
  pinia - 2.1.7 -- Intuitive, type safe and flexible Store for Vue
  vuex - Not installed
  vite - 5.1.1 -- Native-ESM powered web dev build tool
  esbuild - 0.20.0 -- An extremely fast JavaScript and CSS bundler and minifier.
  eslint - 8.56.0 -- An AST-based pattern checker for JavaScript.
  electron - Not installed
  electron-packager - Not installed
  electron-builder - Not installed
  register-service-worker - 1.7.2 -- Script for registering service worker, with hooks
  @capacitor/core - 5.7.0 -- Capacitor: Cross-platform apps with JavaScript and the web
  @capacitor/cli - 5.7.0 -- Capacitor: Cross-platform apps with JavaScript and the web
  @capacitor/android - 5.7.0 -- Capacitor: Cross-platform apps with JavaScript and the web
  @capacitor/ios - 5.7.0 -- Capacitor: Cross-platform apps with JavaScript and the web

Quasar App Extensions
  *None installed*

Relevant log output

No response

Additional context

Build succeeded

Build mode............. spa
Pkg quasar............. v2.14.3
Pkg @quasar/app-vite... v2.0.0-beta.1
Pkg vite............... v5.1.1
Debugging.............. no
Publishing............. no
Browser target......... es2019|edge88|firefox78|chrome87|safari13.1

Hi @diadal! 👋

It looks like you provided an invalid or unsupported reproduction URL.
Do not use any service other than Codepen, jsFiddle, StackBlitz, Codesandbox, and GitHub.
Make sure the URL you provided is correct and reachable. You can test it by visiting it in a private tab, another device, etc.
Please edit your original post above and provide a valid reproduction URL as explained.

Without a proper reproduction, your issue will have to get closed.

Thank you for your collaboration. 👏

Hi,

This is simply how Vite 5 works. The production code should directly reference the full process.env.[X] which will get replaced inline with what you define it with. A console.log(process.env) should not exist in the production code.

in a short word

const appVersionX = process.env.VITE_APP_VERSION;
console.log('appVersionX: ', appVersionX); // worked

const evn_data = process.env;
const appVersion = evn_data?.VITE_APP_VERSION; // not working
console.log('appVersion: ', appVersion);

The process.env.[X] gets replaced inline, for multiple reasons, including security. It is not an Object created in memory that you can handle like any other. Directly write process.env.VITE_APP_VERSION so it can get matched and replaced in your production code. The process.env should not be assignable, and one of the reasons for this is that if your code has access to it then so is a user of your UI with an opened devtools, which poses a great security risk.

nice

this resolved the issue for me

import { boot } from 'quasar/wrappers';

const all_env = {
  VITE_APP_TITLE: process.env.VITE_APP_TITLE,
  VITE_APP_NAME: process.env.VITE_APP_NAME,
  VITE_APP_VERSION: process.env.VITE_APP_VERSION,
  VITE_APP_COLOR: process.env.VITE_APP_COLOR,
  VITE_GOOGLE_KEY: process.env.VITE_GOOGLE_KEY,
  VITE_FIREBASE_API_KEY: process.env.VITE_FIREBASE_API_KEY,
  VITE_FIREBASE_DOMAIN: process.env.VITE_FIREBASE_DOMAIN,
  VITE_FIREBASE_URL: process.env.VITE_FIREBASE_URL,
  VITE_FIREBASE_PROJECT_ID: process.env.VITE_FIREBASE_PROJECT_ID,
  VITE_FIREBASE_BUK: process.env.VITE_FIREBASE_BUK,
  VITE_FIREBASE_MSG_ID: process.env.VITE_FIREBASE_MSG_ID,
  VITE_FIREBASE_APP_ID: process.env.VITE_FIREBASE_APP_ID,
  VITE_FIREBASE_MEN: process.env.VITE_FIREBASE_MEN,
  VITE_PUB_KEY_DEV: process.env.VITE_PUB_KEY_DEV,
  VITE_PUB_KEY_PRO: process.env.VITE_PUB_KEY_PRO,
};

declare module '@vue/runtime-core' {
  interface ComponentCustomProperties {
    $all_env: typeof all_env;
  }
}

export default boot(({ app }) => {
  app.config.globalProperties.$all_env = all_env;
});

Just be aware that all your keys will now be part of the production build (in plain form) whether you use them or not.

Yes I know