easy-team / easywebpack

A Simple, Powerful Webpack Front-End Development Solution
https://easyjs.cn/easywebpack
MIT License
481 stars 51 forks source link

postcss-loader的插入位置不对 #64

Closed 18566246732 closed 5 years ago

18566246732 commented 5 years ago

结论:

postcss-loader插入的首选位置应该是css-loader之后,如果没有css-loader,则插入到style-loader之后

问题:

if (this.postcss && itemLoader.postcss) {
  const postcssIndex = ['css', 'css_module'].includes(name) ? itemLoader.use.length : itemLoader.use.length - 1;
  const postcssLoader = this.createPostCssLoader(loaderOptions && loaderOptions.postcss);
  itemLoader.use.splice(postcssIndex, 0, postcssLoader);
}

之前的这种插入方式会在itemLoader是我自定义的loader时产生bug,比如:

// webpack.config.js
loaders: {
  scss: { // 覆盖原来的 loader use 配置
    use: (isBuildProduction ? [] : [styleLoader]).concat(['css-loader', 'sass-loader', {
      loader: 'sass-resources-loader',
      options: {
        // 全局引入 scss,便于引用函数和变量
        resources: './app/view/app/main/styles/variable.scss',
      }
    }]),
  },
}

这种场景下postcss-loader会自动插入到sass-loader的后面,导致编译失败。

解决方案:

附上我的pr #63 ,希望能受到你们关注,谢谢

hubcarl commented 5 years ago

@18566246732 好的,我验证一下

18566246732 commented 5 years ago

@hubcarl 哈喽,验证的怎么样了?

hubcarl commented 5 years ago

@18566246732 已经合并修复,已发布 4.11.11 具体见:https://github.com/easy-team/easywebpack/blob/master/CHANGELOG.md 请重新安装依赖即可。

18566246732 commented 5 years ago

@hubcarl 好的谢谢