From 204cbe4c4ebde95590c5e4e265e7985a39aca067 Mon Sep 17 00:00:00 2001 From: Shigma <33423008+Shigma@users.noreply.github.com> Date: Sun, 3 Mar 2019 00:32:39 +0800 Subject: [PATCH] fix($core): support theme index file which is not at root (close: #1362) (#1376) --- .../@vuepress/core/lib/prepare/loadTheme.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/@vuepress/core/lib/prepare/loadTheme.js b/packages/@vuepress/core/lib/prepare/loadTheme.js index 9a4bbca3..4092238a 100755 --- a/packages/@vuepress/core/lib/prepare/loadTheme.js +++ b/packages/@vuepress/core/lib/prepare/loadTheme.js @@ -54,14 +54,17 @@ module.exports = function loadTheme (ctx) { function normalizeThemePath (resolved) { const { entry, name, fromDep } = resolved if (fromDep) { - const pkgPath = require.resolve(name) - let packageRootDir = parse(pkgPath).dir - // For those cases that "main" field was set to non-index file - // e.g. `layouts/Layout.vue` - while (!fs.existsSync(`${packageRootDir}/package.json`)) { - packageRootDir = resolve(packageRootDir, '..') + const packageRoot = require.resolve(`${name}/package.json`) + const { main } = require(packageRoot) + if (main.endsWith('.vue')) { + // For those cases that "main" field is set to an non-index file + // e.g. `layouts/Layout.vue` + return packageRoot + } else { + // For those cases that "index.js" is not at package root + // e.g. `lib/index.js` (#1362) + return parse(require.resolve(name)).dir } - return packageRootDir } else if (entry.endsWith('.js') || entry.endsWith('.vue')) { return parse(entry).dir } else {