【问题标题】:How can I get valid css from sass-loader with current webpack configuration?如何使用当前的 webpack 配置从 sass-loader 获取有效的 css?
【发布时间】:2016-12-30 07:01:33
【问题描述】:

我即将为我的公司创建一个模式库。我正在使用以下软件:

  • css-loader@0.23.1
  • extract-text-webpack-plugin@1.0.1
  • node-sass@3.8.0
  • sass-loader@4.0.0
  • style-loader@0.13.1
  • webpack@1.13.2
  • resolve-url-loader@1.6.0
  • node@6.3.1
  • npm@3.10.3

在我的电脑上 (Windows 10)。

我的目标是使用@import "colors" 语句并获取相应的文件../patterns/globals/_colors.css。我尝试了 sass-loader 的 includePaths 配置和属性为 root 的 resolve-url-loader。但到目前为止都没有工作......

在我第一次使用 sass-loader 和 includePaths 运行时,我收到了以下错误报告:

Hash: 396f0bfb9d565b6f60f0
Version: webpack 1.13.2
Time: 522ms
    + 1 hidden modules

ERROR in ./styles.scss
Module build failed: ModuleNotFoundError: Module not found: Error: Cannot resolve 'file' or 'directory' ./colors in ~/projects/webpack-sass-fail/app
    at ~/projects/webpack-sass-fail/app/node_modules/webpack/lib/Compilation.js:229:38
    at onDoneResolving (~/projects/webpack-sass-fail/app/node_modules/webpack/lib/NormalModuleFactory.js:29:20)
    at ~/projects/webpack-sass-fail/app/node_modules/webpack/lib/NormalModuleFactory.js:85:20
    at ~/projects/webpack-sass-fail/app/node_modules/async/lib/async.js:726:13
    at ~/projects/webpack-sass-fail/app/node_modules/async/lib/async.js:52:16
    at done (~/projects/webpack-sass-fail/app/node_modules/async/lib/async.js:241:17)
    at ~/projects/webpack-sass-fail/app/node_modules/async/lib/async.js:44:16
    at ~/projects/webpack-sass-fail/app/node_modules/async/lib/async.js:723:17
    at ~/projects/webpack-sass-fail/app/node_modules/async/lib/async.js:167:37
    at ~/projects/webpack-sass-fail/app/node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js:24:19
    at onResolved (~/projects/webpack-sass-fail/app/node_modules/enhanced-resolve/lib/Resolver.js:38:18)
    at ~/projects/webpack-sass-fail/app/node_modules/enhanced-resolve/lib/Resolver.js:127:10
    at ~/projects/webpack-sass-fail/app/node_modules/enhanced-resolve/lib/Resolver.js:191:15
    at applyPluginsParallelBailResult.createInnerCallback.log (~/projects/webpack-sass-fail/app/node_modules/enhanced-resolve/lib/Resolver.js:110:4)
    at loggingCallbackWrapper (~/projects/webpack-sass-fail/app/node_modules/enhanced-resolve/lib/createInnerCallback.js:21:19)
    at ~/projects/webpack-sass-fail/app/node_modules/tapable/lib/Tapable.js:134:6
    at Tapable.<anonymous> (~/projects/webpack-sass-fail/app/node_modules/enhanced-resolve/lib/DirectoryDescriptionFilePlugin.js:24:12)
    at Storage.finished (~/projects/webpack-sass-fail/app/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:38:16)
    at ReadFileContext.callback (~/projects/webpack-sass-fail/app/node_modules/graceful-fs/graceful-fs.js:78:16)
    at FSReqWrap.readFileAfterOpen [as oncomplete] (fs.js:365:13)
Child extract-text-webpack-plugin:
        + 2 hidden modules

    ERROR in ./~/css-loader!./styles.scss
    Module not found: Error: Cannot resolve 'file' or 'directory' ./colors in ~\projects\webpack-sass-fail\app
     @ ./~/css-loader!./styles.scss 3:10-66

    ERROR in ./~/css-loader!./styles.scss
    Module not found: Error: Cannot resolve 'file' or 'directory' ./typography in ~\projects\webpack-sass-fail\app
     @ ./~/css-loader!./styles.scss 4:10-70

在我第二次使用 resolve-url-loader 运行后,我收到了另一个错误报告:

Hash: 0f2ad6d2bedd426d776a
Version: webpack 1.13.2
Time: 605ms
    Asset     Size  Chunks             Chunk Names
bundle.js  1.42 kB       0  [emitted]  app
   [0] ./client.js 27 bytes {0} [built]
    + 1 hidden modules

ERROR in ./styles.scss
Module build failed: ModuleBuildError: Module build failed: CssSyntaxError: css-loader!~/projects/webpack-sass-fail/patterns/globals/colors.scss:14:9: Unknown word
You tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser
    at Input.error (~/projects/webpack-sass-fail/app/node_modules/postcss/lib/input.js:120:22)
    at Parser.unknownWord (~/projects/webpack-sass-fail/app/node_modules/postcss/lib/parser.js:457:26)
    at Parser.word (~/projects/webpack-sass-fail/app/node_modules/postcss/lib/parser.js:174:14)
    at Parser.loop (~/projects/webpack-sass-fail/app/node_modules/postcss/lib/parser.js:60:26)
    at parse (~/projects/webpack-sass-fail/app/node_modules/postcss/lib/parse.js:26:16)
    at new LazyResult (~/projects/webpack-sass-fail/app/node_modules/postcss/lib/lazy-result.js:80:24)
    at Processor.process (~/projects/webpack-sass-fail/app/node_modules/postcss/lib/processor.js:200:12)
    at processCss (~/projects/webpack-sass-fail/app/node_modules/css-loader/lib/processCss.js:188:11)
    at Object.module.exports (~/projects/webpack-sass-fail/app/node_modules/css-loader/lib/loader.js:24:2)
    at DependenciesBlock.onModuleBuildFailed (~/projects/webpack-sass-fail/app/node_modules/webpack-core/lib/NormalModuleMixin.js:315:19)
    at nextLoader (~/projects/webpack-sass-fail/app/node_modules/webpack-core/lib/NormalModuleMixin.js:270:31)
    at ~/projects/webpack-sass-fail/app/node_modules/webpack-core/lib/NormalModuleMixin.js:292:15
    at context.callback (~/projects/webpack-sass-fail/app/node_modules/webpack-core/lib/NormalModuleMixin.js:148:14)
    at Object.<anonymous> (~/projects/webpack-sass-fail/app/node_modules/css-loader/lib/loader.js:32:18)
    at ~/projects/webpack-sass-fail/app/node_modules/css-loader/lib/processCss.js:211:3
    at runMicrotasksCallback (internal/process/next_tick.js:58:5)
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickCallback (internal/process/next_tick.js:98:9)
Child extract-text-webpack-plugin:
        + 4 hidden modules

    ERROR in ./~/css-loader!../patterns/globals/colors.scss
    Module build failed: CssSyntaxError: css-loader!~/projects/webpack-sass-fail/patterns/globals/colors.scss:14:9: Unknown word
    You tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser
        at Input.error (~/projects/webpack-sass-fail/app/node_modules/postcss/lib/input.js:120:22)
        at Parser.unknownWord (~/projects/webpack-sass-fail/app/node_modules/postcss/lib/parser.js:457:26)
        at Parser.word (~/projects/webpack-sass-fail/app/node_modules/postcss/lib/parser.js:174:14)
        at Parser.loop (~/projects/webpack-sass-fail/app/node_modules/postcss/lib/parser.js:60:26)
        at parse (~/projects/webpack-sass-fail/app/node_modules/postcss/lib/parse.js:26:16)
        at new LazyResult (~/projects/webpack-sass-fail/app/node_modules/postcss/lib/lazy-result.js:80:24)
        at Processor.process (~/projects/webpack-sass-fail/app/node_modules/postcss/lib/processor.js:200:12)
        at processCss (~/projects/webpack-sass-fail/app/node_modules/css-loader/lib/processCss.js:188:11)
        at Object.module.exports (~/projects/webpack-sass-fail/app/node_modules/css-loader/lib/loader.js:24:2)
     @ ./~/css-loader!./styles.scss 3:10-89

    ERROR in ./~/css-loader!../patterns/globals/typography.scss
    Module not found: Error: Cannot resolve 'file' or 'directory' ./colors in ~/projects/webpack-sass-fail/patterns/globals
     @ ./~/css-loader!../patterns/globals/typography.scss 3:10-76

我尝试用以下内容编译一个简单的 sass:

$grey: lightgrey;
$family: "Tahoma";

body {
  font-size: 12px;
}

p {
  border: 1px solid $grey;
  font-family: $family;
}

使用提到的 webpack 配置,我没有收到错误消息,但收到了无效的 CSS 代码,如下所示:

$family: "Tahoma";
$grey: lightgrey;

body {
  font-size: 12px;
}

p {
  border: 1px solid $grey;
  font-family: $family;
}

我不明白我失败的根源在哪里。

最好的问候, JBrieske

编辑:在@IRus 的帮助下,我设法解决了我的问题。

【问题讨论】:

    标签: sass webpack css-loader sass-loader


    【解决方案1】:

    模块构建失败:ModuleNotFoundError:找不到模块:错误: 无法解析“文件”或“目录”./colors in ~/projects/webpack-sass-fail/app

    typography.scss 中将color 重命名为color.scss。或者在 webpack 配置中正确设置 resolve


    您尝试使用标准 CSS 解析器解析 SCSS;使用 postcss-scss 解析器重试


    以这种方式更改ExtractTextPlugin中的加载器:

    {test: /\.scss$/, loader: ExtractTextPlugin.extract('style', 'css!resolve-url!sass')}
    // or
    { test: /\.scss$/, loader: ExtractTextPlugin.extract('style', ['css', 'resolve-url', 'sass']) }
    

    因为这是等价的:

    {test: /\.scss$/, loader: ExtractTextPlugin.extract('style', 'css')}
    {test: /\.scss$/, loader: ExtractTextPlugin.extract('style', 'css', 'resolve-url', 'sass')}
    

    比你得到新的错误:

    未定义变量:“$grey”。

    这只是 styles.scss 中的拼写错误:

    // border: 1px solid $grey;
    border: 1px solid $gray;
    

    【讨论】:

      猜你喜欢
      • 2018-02-22
      • 2017-04-10
      • 2021-11-14
      • 2017-07-15
      • 2019-03-02
      • 2017-11-18
      • 2018-02-07
      • 2021-04-18
      • 1970-01-01
      相关资源
      最近更新 更多