Отсутствуют переменные среды при использовании npm(9.6.4) и node(19.9.0)

У меня сложилось впечатление, что вы можете найти каждую запись вашего package.json в качестве переменной среды. Например, npm_package_dependencies_svelte предоставит вам версию svelte, которая установлена, или npm_package_author_email предоставит вам поле электронной почты свойства автора.

Согласно документу npm (9.6.3) Поля package.json добавляются к префиксу npm_package_.

Однако, когда я проверяю, что у меня есть, запустив:

"check-env": "node -e 'console.info(process.env)' | grep npm",

Кажется, в моем проекте SvelteKit их всего три.

npm_package_json=/Users/**/Desktop/test-package-version-sveltekit-master/package.json
npm_package_name=test-package-version-svelte
npm_package_version=0.0.1

Я в недоумении, почему? Я хочу получить доступ npm_package_devDependencies_svelte Но эта переменная никогда не создается во время npm run dev. Я пропустил что-то важное здесь?

npm -v 9.6.4
node -v 19.9.0

Для пояснения: у меня настроен проект скелета sveltekit по умолчанию, и я пытаюсь получить доступ к переменным таким образом.

// src/hooks.server.ts
import {
    npm_package_version,
    npm_package_devDependencies_svelte,
} from '$env/static/private';

export const handle = async ({ event, resolve }) => {
    console.info({
        packageVersion: npm_package_version,
        svelte: npm_package_devDependencies_svelte.split('^').join(''),
    });

    return await resolve(event);
};

Обычно я не добавляю эту ссылку, так как она взята из S.O. но это самый эффективный способ показать повторение моей проблемы. CodeSandbox.io

Я зашел в ваш CodeSandbox, открыл консоль, и все версии отобразились корректно, поэтому переменные окружения присутствуют при запуске сайта.

Pioupia 23.04.2023 10:20
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
121
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Более явный подход — напрямую импортировать файл package.json.

Используя TypeScript, добавьте следующее в свой tsconfig.json:

"compilerOptions": {
    ...
    "resolveJsonModule": true
  },
  "include": [..., "**/*.json"]
}

Затем в src/hooks.server.ts:

import * as pj from "../package.json";

console.info({
    packageName: pj.name,
    packageVersion: pj.version,
    svelte: pj.devDependencies.svelte.split('^').join(''),
    typescript: pj.devDependencies.typescript.split('^').join('')
});

Надеюсь, это поможет! 🤘

Другие вопросы по теме