У меня сложилось впечатление, что вы можете найти каждую запись вашего 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
Более явный подход — напрямую импортировать файл 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('')
});
Надеюсь, это поможет! 🤘
Я зашел в ваш CodeSandbox, открыл консоль, и все версии отобразились корректно, поэтому переменные окружения присутствуют при запуске сайта.