From 31454eaac26bf081b206ee23756ff9d070a0d194 Mon Sep 17 00:00:00 2001 From: "Xin Du (Clark)" Date: Tue, 12 Oct 2021 18:39:55 +0100 Subject: [PATCH] fix(nitro): firebase package.json is not exported (#809) --- src/presets/firebase.ts | 7 +++---- src/utils/index.ts | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/presets/firebase.ts b/src/presets/firebase.ts index 25d5aaf4bd..a7bfbdaadd 100644 --- a/src/presets/firebase.ts +++ b/src/presets/firebase.ts @@ -4,7 +4,7 @@ import fse from 'fs-extra' import consola from 'consola' import globby from 'globby' -import { writeFile } from '../utils' +import { readPackageJson, writeFile } from '../utils' import { NitroPreset, NitroContext } from '../context' export const firebase: NitroPreset = { @@ -69,9 +69,8 @@ async function writeRoutes ({ output: { publicDir, serverDir }, _nuxt: { rootDir dependencies, devDependencies: { 'firebase-functions-test': 'latest', - 'firebase-admin': _require('firebase-admin/package.json').version, - 'firebase-functions': _require('firebase-functions/package.json') - .version + 'firebase-admin': readPackageJson('firebase-admin', _require).version, + 'firebase-functions': readPackageJson('firebase-functions', _require).version }, engines: { node: nodeVersion } }, diff --git a/src/utils/index.ts b/src/utils/index.ts index 997f363e66..998f659ead 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -125,3 +125,18 @@ export function getDependencies (dir: string, mode: keyof typeof _getDependencie export function serializeImportName (id: string) { return '_' + id.replace(/[^a-zA-Z0-9_$]/g, '_') } + +export function readPackageJson ( + packageName: string, + _require: NodeRequire = createRequire(import.meta.url) +) { + try { + return _require(`${packageName}/package.json`) + } catch (error) { + if (error.code === 'ERR_PACKAGE_PATH_NOT_EXPORTED') { + const [pkgModulePath] = /^(.*\/node_modules\/).*$/.exec(_require.resolve(packageName)) + return fse.readJSONSync(resolve(pkgModulePath, packageName, 'package.json')) + } + throw error + } +}