Skip to content

Commit b69697e

Browse files
merceyzhaoqunjiang
andauthored
fix(cli): resolve plugins relative to the package context (#5794)
Co-authored-by: Haoqun Jiang <[email protected]>
1 parent e1eba09 commit b69697e

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

Diff for: packages/@vue/cli-service/lib/Service.js

+8-9
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const PluginAPI = require('./PluginAPI')
77
const dotenv = require('dotenv')
88
const dotenvExpand = require('dotenv-expand')
99
const defaultsDeep = require('lodash.defaultsdeep')
10-
const { chalk, warn, error, isPlugin, resolvePluginId, loadModule, resolvePkg } = require('@vue/cli-shared-utils')
10+
const { chalk, warn, error, isPlugin, resolvePluginId, loadModule, resolvePkg, resolveModule } = require('@vue/cli-shared-utils')
1111

1212
const { defaults, validate } = require('./options')
1313
const checkWebpack = require('@vue/cli-service/lib/util/checkWebpack')
@@ -143,9 +143,9 @@ module.exports = class Service {
143143
}
144144

145145
resolvePlugins (inlinePlugins, useBuiltIn) {
146-
const idToPlugin = id => ({
146+
const idToPlugin = (id, absolutePath) => ({
147147
id: id.replace(/^.\//, 'built-in:'),
148-
apply: require(id)
148+
apply: require(absolutePath || id)
149149
})
150150

151151
let plugins
@@ -161,7 +161,7 @@ module.exports = class Service {
161161
'./config/css',
162162
'./config/prod',
163163
'./config/app'
164-
].map(idToPlugin)
164+
].map((id) => idToPlugin(id))
165165

166166
if (inlinePlugins) {
167167
plugins = useBuiltIn !== false
@@ -176,16 +176,15 @@ module.exports = class Service {
176176
this.pkg.optionalDependencies &&
177177
id in this.pkg.optionalDependencies
178178
) {
179-
let apply = () => {}
180-
try {
181-
apply = require(id)
182-
} catch (e) {
179+
let apply = loadModule(id, this.pkgContext)
180+
if (!apply) {
183181
warn(`Optional dependency ${id} is not installed.`)
182+
apply = () => {}
184183
}
185184

186185
return { id, apply }
187186
} else {
188-
return idToPlugin(id)
187+
return idToPlugin(id, resolveModule(id, this.pkgContext))
189188
}
190189
})
191190
plugins = builtInPlugins.concat(projectPlugins)

Diff for: packages/@vue/cli-shared-utils/lib/module.js

+7
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ const resolve = semver.satisfies(process.version, '>=10.0.0')
5050
: resolveFallback
5151

5252
exports.resolveModule = function (request, context) {
53+
// createRequire doesn't work with jest mock modules
54+
// (which we used in migrator for inquirer, and in tests for cli-service)
55+
// TODO: it's supported in Jest 25
56+
if (process.env.VUE_CLI_TEST && (request.endsWith('migrator') || context === '/')) {
57+
return request
58+
}
59+
5360
let resolvedPath
5461
try {
5562
try {

0 commit comments

Comments
 (0)