@@ -2,7 +2,9 @@ const less = require('less');
22const loaderUtils = require ( 'loader-utils' ) ;
33const pify = require ( 'pify' ) ;
44
5+ const stringifyLoader = require . resolve ( './stringifyLoader.js' ) ;
56const trailingSlash = / [ \\ / ] $ / ;
7+ const isLessCompatible = / \. ( l e | c ) s s $ / ;
68
79/**
810 * Creates a Less plugin that uses webpack's resolving engine that is provided by the loaderContext.
@@ -11,9 +13,11 @@ const trailingSlash = /[\\/]$/;
1113 * @param {string= } root
1214 * @returns {LessPlugin }
1315 */
14- function createWebpackLessPlugin ( loaderContext , root ) {
16+ function createWebpackLessPlugin ( loaderContext ) {
17+ const { fs } = loaderContext ;
1518 const resolve = pify ( loaderContext . resolve . bind ( loaderContext ) ) ;
1619 const loadModule = pify ( loaderContext . loadModule . bind ( loaderContext ) ) ;
20+ const readFile = pify ( fs . readFile . bind ( fs ) ) ;
1721
1822 class WebpackFileManager extends less . FileManager {
1923 supports ( /* filename, currentDirectory, options, environment */ ) { // eslint-disable-line class-methods-use-this
@@ -22,7 +26,7 @@ function createWebpackLessPlugin(loaderContext, root) {
2226 }
2327
2428 loadFile ( filename , currentDirectory /* , options, environment */ ) { // eslint-disable-line class-methods-use-this
25- const moduleRequest = loaderUtils . urlToRequest ( filename , root ) ;
29+ const moduleRequest = loaderUtils . urlToRequest ( filename ) ;
2630 // Less is giving us trailing slashes, but the context should have no trailing slash
2731 const context = currentDirectory . replace ( trailingSlash , '' ) ;
2832 let resolvedFilename ;
@@ -32,11 +36,17 @@ function createWebpackLessPlugin(loaderContext, root) {
3236 resolvedFilename = f ;
3337 loaderContext . addDependency ( resolvedFilename ) ;
3438
35- return loadModule ( `-!${ __dirname } /stringify.loader.js!${ resolvedFilename } ` ) ;
39+ if ( isLessCompatible . test ( resolvedFilename ) ) {
40+ return readFile ( resolvedFilename )
41+ . then ( contents => contents . toString ( 'utf8' ) ) ;
42+ }
43+
44+ return loadModule ( [ stringifyLoader , resolvedFilename ] . join ( '!' ) )
45+ . then ( JSON . parse ) ;
3646 } )
3747 . then ( ( contents ) => {
3848 return {
39- contents : JSON . parse ( contents ) ,
49+ contents,
4050 filename : resolvedFilename ,
4151 } ;
4252 } ) ;
0 commit comments