diff --git a/lib/loader/mixin/plugin.js b/lib/loader/mixin/plugin.js index c12a0ebb..aceb48f2 100644 --- a/lib/loader/mixin/plugin.js +++ b/lib/loader/mixin/plugin.js @@ -308,7 +308,7 @@ module.exports = { for (let dir of lookupDirs) { dir = path.join(dir, name); if (fs.existsSync(dir)) { - return dir; + return fs.realpathSync(dir); } } diff --git a/package.json b/package.json index b5595c7c..5899ca78 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "koa-router": "4", "mm": "^2.0.0", "pedding": "^1.0.0", + "rimraf": "^2.5.4", "should": "^11.1.0", "supertest": "^2.0.0" }, diff --git a/test/fixtures/realpath/a/package.json b/test/fixtures/realpath/a/package.json new file mode 100644 index 00000000..0993be8f --- /dev/null +++ b/test/fixtures/realpath/a/package.json @@ -0,0 +1,5 @@ +{ + "eggPlugin": { + "name": "a" + } +} diff --git a/test/fixtures/realpath/config/plugin.js b/test/fixtures/realpath/config/plugin.js new file mode 100644 index 00000000..6726fe97 --- /dev/null +++ b/test/fixtures/realpath/config/plugin.js @@ -0,0 +1,6 @@ +'use strict'; + +exports.a = { + enable: true, + pacakge: 'b', +}; diff --git a/test/fixtures/realpath/node_modules/.gitkeep b/test/fixtures/realpath/node_modules/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test/fixtures/realpath/node_modules/a b/test/fixtures/realpath/node_modules/a new file mode 120000 index 00000000..82f488f2 --- /dev/null +++ b/test/fixtures/realpath/node_modules/a @@ -0,0 +1 @@ +../a \ No newline at end of file diff --git a/test/fixtures/realpath/package.json b/test/fixtures/realpath/package.json new file mode 100644 index 00000000..b928156e --- /dev/null +++ b/test/fixtures/realpath/package.json @@ -0,0 +1,3 @@ +{ + "name": "realpath" +} diff --git a/test/loader/mixin/load_plugin.test.js b/test/loader/mixin/load_plugin.test.js index 30d868a0..fd873394 100644 --- a/test/loader/mixin/load_plugin.test.js +++ b/test/loader/mixin/load_plugin.test.js @@ -2,7 +2,9 @@ const should = require('should'); const path = require('path'); +const fs = require('fs'); const mm = require('mm'); +const rimraf = require('rimraf'); const utils = require('../../utils'); describe('test/load_plugin.test.js', function() { @@ -370,4 +372,15 @@ describe('test/load_plugin.test.js', function() { loader.plugins.hsfclient.path .should.equal(utils.getFilepath('plugin-path-package/node_modules/hsfclient')); }); + + it('should resolve the realpath of plugin path', () => { + rimraf.sync(utils.getFilepath('realpath/node_modules/a')); + fs.symlinkSync('../a', utils.getFilepath('realpath/node_modules/a'), 'dir'); + app = utils.createApp('realpath'); + const loader = app.loader; + loader.loadPlugin(); + const plugin = loader.plugins.a; + plugin.name.should.equal('a'); + plugin.path.should.equal(utils.getFilepath('realpath/a')); + }); });