mikser
Version:
Real-time static site generator
45 lines (43 loc) • 1.47 kB
JavaScript
let Promise = require('bluebird');
let exec = Promise.promisify(require('child_process').exec);
let fs = require("fs-extra-promise");
let path = require('path');
let S = require('string');
module.exports = function (mikser, context) {
let debug = mikser.debug('using');
let using = [];
if (context.layout.meta && context.layout.meta.use) {
if (typeof context.layout.meta.use == 'string') using.push(context.layout.meta.use);
else using = context.layout.meta.use;
} else {
return Promise.resolve();
}
using = using.filter((use) => {
let packagePath = path.join(mikser.config.runtimeFolder, 'node_modules', use);
if (fs.existsSync(packagePath)) {
context[S(use).camelize().s] = require(packagePath);
return false;
} else {
packagePath = path.join(mikser.options.workingFolder, 'node_modules', use);
if (fs.existsSync(packagePath)) {
context[S(use).camelize().s] = require(packagePath);
return false;
}
else {
context[S(use).camelize().s] = require(use);
return false;
}
}
return true;
});
if (!using.length) return Promise.resolve();
debug('Installing packages:', using);
let npm = 'npm i --prefix ' + mikser.config.runtimeFolder + ' ' + using.join(' ');
return exec(npm).then(() => {
for (let use of using) {
let packagePath = path.join(mikser.config.runtimeFolder, 'node_modules', use);
context[use] = require(packagePath);
}
});
}