|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- 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
- };
- }
- };
|