Skip to content

Commit

Permalink
fix: should not load optional plugin & their deps (#154)
Browse files Browse the repository at this point in the history
  • Loading branch information
gxcsoccer authored and popomore committed Mar 9, 2018
1 parent eb4b12b commit 046ffdd
Show file tree
Hide file tree
Showing 9 changed files with 80 additions and 22 deletions.
25 changes: 15 additions & 10 deletions lib/utils/sequencify.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
'use strict';

function sequence(tasks, names, results, missing, recursive, nest, optional) {
const debug = require('debug')('egg-core#sequencify');

function sequence(tasks, names, results, missing, recursive, nest, optional, parent) {
names.forEach(function(name) {
if (results.sequence.includes(name)) {
results.requires[name] = results.requires[name] || !optional;
return; // de-dup results
}
if (results.requires[name]) return;

const node = tasks[name];

if (!node) {
Expand All @@ -18,15 +18,20 @@ function sequence(tasks, names, results, missing, recursive, nest, optional) {
} else if (node.dependencies.length || node.optionalDependencies.length) {
nest.push(name);
if (node.dependencies.length) {
sequence(tasks, node.dependencies, results, missing, recursive, nest);
sequence(tasks, node.dependencies, results, missing, recursive, nest, optional, name);
}
if (node.optionalDependencies.length) {
sequence(tasks, node.optionalDependencies, results, missing, recursive, nest, true);
sequence(tasks, node.optionalDependencies, results, missing, recursive, nest, true, name);
}
nest.pop(name);
}
results.requires[name] = results.requires[name] || !optional;
results.sequence.push(name);
if (!optional) {
results.requires[name] = true;
debug('task: %s is enabled by %s', name, parent);
}
if (!results.sequence.includes(name)) {
results.sequence.push(name);
}
});
}

Expand All @@ -40,7 +45,7 @@ module.exports = function(tasks, names) {
const missing = []; // missing tasks
const recursive = []; // recursive task dependencies

sequence(tasks, names, results, missing, recursive, []);
sequence(tasks, names, results, missing, recursive, [], false, 'app');

if (missing.length || recursive.length) {
results.sequence = []; // results are incomplete at best, completely wrong at worst, remove them to avoid confusion
Expand Down
20 changes: 10 additions & 10 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,13 @@
"devDependencies": {
"autod": "^3.0.1",
"coffee": "^4.1.0",
"egg-bin": "^4.3.6",
"egg-bin": "^4.3.7",
"egg-ci": "^1.8.0",
"eslint": "^4.13.1",
"eslint-config-egg": "^5.1.1",
"js-yaml": "^3.10.0",
"eslint": "^4.18.2",
"eslint-config-egg": "^7.0.0",
"js-yaml": "^3.11.0",
"mm": "^2.2.0",
"mz-modules": "^2.0.0",
"mz-modules": "^2.1.0",
"pedding": "^1.1.0",
"rimraf": "^2.6.2",
"spy": "^1.0.0",
Expand All @@ -50,16 +50,16 @@
"dependencies": {
"co": "^4.6.0",
"debug": "^3.1.0",
"depd": "^1.1.1",
"egg-logger": "^1.6.0",
"depd": "^1.1.2",
"egg-logger": "^1.6.1",
"egg-path-matching": "^1.0.1",
"extend2": "^1.0.0",
"globby": "^7.1.1",
"globby": "^8.0.1",
"inflection": "^1.12.0",
"is-type-of": "^1.2.0",
"koa": "^2.4.1",
"koa": "^2.5.0",
"koa-convert": "^1.2.0",
"koa-router": "^7.3.0",
"koa-router": "^7.4.0",
"node-homedir": "^1.1.0",
"ready-callback": "^2.0.1",
"utility": "^1.13.1"
Expand Down
18 changes: 18 additions & 0 deletions test/fixtures/plugin-complex-deps/config/plugin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
'use strict';

const path = require('path');

exports.tracelog = {
enable: true,
path: path.join(__dirname, '../plugin/tracelog'),
};

exports.rpcServer = {
enable: false,
path: path.join(__dirname, '../plugin/rpc-server'),
};

exports.gw = {
enable: false,
path: path.join(__dirname, '../plugin/gw'),
};
3 changes: 3 additions & 0 deletions test/fixtures/plugin-complex-deps/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"name": "demo"
}
8 changes: 8 additions & 0 deletions test/fixtures/plugin-complex-deps/plugin/gw/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"eggPlugin": {
"name": "gw",
"dependencies": [
"rpcServer"
]
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"eggPlugin": {
"name": "rpcServer"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"eggPlugin": {
"name": "tracelog",
"optionalDependencies": [
"gw",
"rpcServer"
]
}
}
4 changes: 2 additions & 2 deletions test/loader/file_loader.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const yaml = require('js-yaml');
const FileLoader = require('../../lib/loader/file_loader');
const dirBase = path.join(__dirname, '../fixtures/load_dirs');

describe('test/file_loader.test.js', () => {
describe('test/loader/file_loader.test.js', () => {
it('should load files', done => {
const services = {};
new FileLoader({
Expand Down Expand Up @@ -326,7 +326,7 @@ describe('test/file_loader.test.js', () => {
return filepath;
},
}).load();
}, /caseStyle expect an array, but got foo_bar1.js/);
}, /caseStyle expect an array, but got/);
});

it('should be overridden by lowercaseFirst', () => {
Expand Down
10 changes: 10 additions & 0 deletions test/loader/mixin/load_plugin.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -570,4 +570,14 @@ describe('test/load_plugin.test.js', function() {
assert(loader.allPlugins.c.enable === false);
assert(loader.allPlugins.d.enable === true);
});

it('should not load optionalDependencies and their dependencies', () => {
mm(process.env, 'EGG_SERVER_ENV', 'default');
app = utils.createApp('plugin-complex-deps');
const loader = app.loader;
loader.loadPlugin();
assert(loader.allPlugins.tracelog.enable === true);
assert(loader.allPlugins.gw.enable === false);
assert(loader.allPlugins.rpcServer.enable === false);
});
});

0 comments on commit 046ffdd

Please sign in to comment.