54 lines
No EOL
1 KiB
JavaScript
54 lines
No EOL
1 KiB
JavaScript
const pify = require('pify');
|
|
const importCwd = require('import-cwd');
|
|
const path = require('path');
|
|
|
|
const getFileName = filepath => path.basename(filepath);
|
|
|
|
function loadModule(moduleId) {
|
|
// Trying to load module normally (relative to plugin directory)
|
|
try {
|
|
return require(moduleId);
|
|
} catch (_) {
|
|
// Ignore error
|
|
}
|
|
|
|
// Then, trying to load it relative to CWD
|
|
return importCwd.silent(moduleId);
|
|
}
|
|
|
|
module.exports = {
|
|
name: 'less',
|
|
test: /\.less$/,
|
|
async process({
|
|
code
|
|
}) {
|
|
const less = loadModule('less');
|
|
if (!less) {
|
|
throw new Error('You need to install "less" packages in order to process Less files');
|
|
}
|
|
|
|
let {
|
|
css,
|
|
map,
|
|
imports
|
|
} = await pify(less.render.bind(less))(code, {
|
|
...this.options,
|
|
sourceMap: this.sourceMap && { outputSourceFiles: true },
|
|
filename: this.id
|
|
});
|
|
|
|
for (const dep of imports) {
|
|
this.dependencies.add(dep);
|
|
}
|
|
|
|
if (map) {
|
|
map = JSON.parse(map);
|
|
map.sources = map.sources.map(source => getFileName(source));
|
|
}
|
|
|
|
return {
|
|
code: css,
|
|
map
|
|
};
|
|
}
|
|
}; |