lib/webpackImporter.js
function webpackImporter(resourcePath, resolve, addNormalizedDependency) {
  function dirContextFrom(fileContext) {
    return path.dirname(
      // The first file is 'stdin' when we're using the data option
      fileContext === 'stdin' ? resourcePath : fileContext
    );
  }

  // eslint-disable-next-line no-shadow
  function startResolving(dir, importsToResolve) {
    return importsToResolve.length === 0
      ? Promise.reject()
      : resolve(dir, importsToResolve[0]).then(
          (resolvedFile) => {
            // Add the resolvedFilename as dependency. Although we're also using stats.includedFiles, this might come
            // in handy when an error occurs. In this case, we don't get stats.includedFiles from node-sass.
            addNormalizedDependency(resolvedFile);
            return {
              // By removing the CSS file extension, we trigger node-sass to include the CSS file instead of just linking it.
              file: resolvedFile.replace(matchCss, ''),
            };
          },
          () => startResolving(dir, tail(importsToResolve))
        );
  }

  return (url, prev, done) => {
    startResolving(dirContextFrom(prev), importsToResolve(url))
      // Catch all resolving errors, return the original file and pass responsibility back to other custom importers
      .catch(() => {
        return {
          file: url,
        };
      })
      .then(done);
  };
}
function webpackImporter(resourcePath, resolve, addNormalizedDependency) {
  function dirContextFrom(fileContext) {
    return path.dirname(
      // The first file is 'stdin' when we're using the data option
      fileContext === 'stdin' ? resourcePath : fileContext
    );
  }

  // eslint-disable-next-line no-shadow
  function startResolving(dir, importsToResolve) {
    return importsToResolve.length === 0
      ? Promise.reject()
      : resolve(dir, importsToResolve[0]).then(
          (resolvedFile) => {
            // Add the resolvedFilename as dependency. Although we're also using stats.includedFiles, this might come
            // in handy when an error occurs. In this case, we don't get stats.includedFiles from node-sass.
            addNormalizedDependency(resolvedFile);
            return {
              // By removing the CSS file extension, we trigger node-sass to include the CSS file instead of just linking it.
              file: resolvedFile.replace(matchCss, ''),
            };
          },
          () => startResolving(dir, tail(importsToResolve))
        );
  }

  return (url, prev, done) => {
    startResolving(dirContextFrom(prev), importsToResolve(url))
      // Catch all resolving errors, return the original file and pass responsibility back to other custom importers
      .catch(() => {
        return {
          file: url,
        };
      })
      .then(done);
  };
}
function webpackImporter ( resourcePath , resolve , addNormalizedDependency ) { function dirContextFrom ( fileContext ) { return path . dirname ( // The first file is 'stdin' when we're using the data option fileContext === 'stdin' ? resourcePath : fileContext ) ; } // eslint-disable-next-line no-shadow function startResolving ( dir , importsToResolve ) { return importsToResolve . length === 0 ? Promise . reject ( ) : resolve ( dir , importsToResolve [ 0 ] ) . then ( ( resolvedFile ) => { // Add the resolvedFilename as dependency. Although we're also using stats.includedFiles, this might come // in handy when an error occurs. In this case, we don't get stats.includedFiles from node-sass. addNormalizedDependency ( resolvedFile ) ; return { // By removing the CSS file extension, we trigger node-sass to include the CSS file instead of just linking it. file : resolvedFile . replace ( matchCss , '' ) , } ; } , ( ) => startResolving ( dir , tail ( importsToResolve ) ) ) ; } return ( url , prev , done ) => { startResolving ( dirContextFrom ( prev ) , importsToResolve ( url ) ) // Catch all resolving errors, return the original file and pass responsibility back to other custom importers . catch ( ( ) => { return { file : url , } ; } ) . then ( done ) ; } ; }
Returns an importer that uses webpack's resolving algorithm.

It's important that the returned function has the correct number of arguments
(based on whether the call is sync or async) because otherwise node-sass doesn't exit.

@param {string} resourcePath
@param {PromisedResolve} resolve
@param {Function<string>} addNormalizedDependency
@returns {Importer}
Returns an importer that uses webpack s resolving algorithm .