|
1 | 1 | const Asset = require('../Asset'); |
2 | 2 | const localRequire = require('../utils/localRequire'); |
3 | 3 | const promisify = require('../utils/promisify'); |
| 4 | +const Resolver = require('../Resolver'); |
| 5 | +const syncPromise = require('../utils/syncPromise'); |
| 6 | +const fs = require('../utils/fs'); |
| 7 | +const path = require('path'); |
4 | 8 |
|
5 | 9 | class LESSAsset extends Asset { |
6 | 10 | constructor(name, options) { |
@@ -54,8 +58,39 @@ function urlPlugin(asset) { |
54 | 58 |
|
55 | 59 | visitor.run = visitor.visit; |
56 | 60 | pluginManager.addVisitor(visitor); |
| 61 | + |
| 62 | + let LessFileManager = getFileManager(less, asset.options); |
| 63 | + pluginManager.addFileManager(new LessFileManager()); |
57 | 64 | } |
58 | 65 | }; |
59 | 66 | } |
60 | 67 |
|
| 68 | +function getFileManager(less, options) { |
| 69 | + const resolver = new Resolver({ |
| 70 | + extensions: ['.css', '.less'], |
| 71 | + rootDir: options.rootDir |
| 72 | + }); |
| 73 | + |
| 74 | + class LessFileManager extends less.FileManager { |
| 75 | + async resolve(filename, currentDirectory) { |
| 76 | + return (await resolver.resolve( |
| 77 | + filename, |
| 78 | + path.join(currentDirectory, 'index') |
| 79 | + )).path; |
| 80 | + } |
| 81 | + |
| 82 | + async loadFile(filename, currentDirectory) { |
| 83 | + filename = await this.resolve(filename, currentDirectory); |
| 84 | + let contents = await fs.readFile(filename, 'utf8'); |
| 85 | + return {contents, filename}; |
| 86 | + } |
| 87 | + |
| 88 | + loadFileSync(filename, currentDirectory) { |
| 89 | + return syncPromise(this.loadFile(filename, currentDirectory)); |
| 90 | + } |
| 91 | + } |
| 92 | + |
| 93 | + return LessFileManager; |
| 94 | +} |
| 95 | + |
61 | 96 | module.exports = LESSAsset; |
0 commit comments