From f6e20deac04bc4e632cee195e25dd50a9c66dbb4 Mon Sep 17 00:00:00 2001 From: Lewis Cowper Date: Thu, 11 May 2017 11:56:22 +0200 Subject: [PATCH] Allow plugins to be stored as devDependencies too. When using a custom server, I would like to store only the output of hexo's build process, and no extra dependencies, and the way I can do that is by storing the plugins in devDep and running npm install --production to get the server dependencies. --- lib/hexo/load_plugins.js | 2 +- test/scripts/hexo/load_plugins.js | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/hexo/load_plugins.js b/lib/hexo/load_plugins.js index 62eb69394e..537dac4796 100644 --- a/lib/hexo/load_plugins.js +++ b/lib/hexo/load_plugins.js @@ -31,7 +31,7 @@ function loadModuleList(ctx) { // Read package.json and find dependencies return fs.readFile(packagePath).then(function(content) { var json = JSON.parse(content); - var deps = json.dependencies || {}; + var deps = json.dependencies || json.devDependencies || {}; return Object.keys(deps); }); diff --git a/test/scripts/hexo/load_plugins.js b/test/scripts/hexo/load_plugins.js index 4d5f695274..443eba2bd5 100644 --- a/test/scripts/hexo/load_plugins.js +++ b/test/scripts/hexo/load_plugins.js @@ -43,6 +43,21 @@ describe('Load plugins', () => { return fs.writeFile(pathFn.join(hexo.base_dir, 'package.json'), JSON.stringify(pkg, null, ' ')); } + function createPackageFileWithDevDeps(...args) { + var pkg = { + name: 'hexo-site', + version: '0.0.0', + private: true, + devDependencies: {} + }; + + for (var i = 0, len = args.length; i < len; i++) { + pkg.devDependencies[args[i]] = '*'; + } + + return fs.writeFile(pathFn.join(hexo.base_dir, 'package.json'), JSON.stringify(pkg, null, ' ')); + } + hexo.env.init = true; hexo.theme_script_dir = pathFn.join(hexo.base_dir, 'themes', 'test', 'scripts'); @@ -76,6 +91,19 @@ describe('Load plugins', () => { }); }); + it('load devDep plugins', () => { + var name = 'hexo-plugin-test'; + var path = pathFn.join(hexo.plugin_dir, name, 'index.js'); + + return Promise.all([ + createPackageFileWithDevDeps(name), + fs.writeFile(path, script) + ]).then(() => loadPlugins(hexo)).then(() => { + validate(path); + return fs.unlink(path); + }); + }); + it('specify plugin list in config', () => { var names = ['hexo-plugin-test', 'another-plugin']; var paths = names.map(name => pathFn.join(hexo.plugin_dir, name, 'index.js'));