当前位置:  开发笔记 > 前端 > 正文

Webpack Sass导入URL解析

如何解决《WebpackSass导入URL解析》经验,为你挑选了1个好方法。

我正在使用具有此目录结构的React和Webpack构建Web应用程序

/src
    /components
    /containers
        App.js
        App.scss
    /assets
        /fonts
            MarkOT/
                MarkOT.css
                MarkOT.eot
                ...
            ...
        /images
    /styles
        _vars.scss

我正试图_vars.scssApp.scss这样导入:

@import '../../styles/vars';

这工作得很好.什么是行不通的,如果我有进口_vars.scss

@import "../assets/fonts/MarkOT-ExtraLight/MarkOT-ExtraLight.css";
@import "../assets/fonts/MarkOT-Light/MarkOT-Light.css";
@import "../assets/fonts/MarkOT/MarkOT.css";
@import "../assets/fonts/MarkOT-Medium/MarkOT-Medium.css";
@import "../assets/fonts/MarkOT-Book/MarkOT-Book.css";

那些导入应该相对于styles文件夹解析.而是相对于进口得到解决containers/App/App.scss.我在sass-loader网站上看到,应该使用它resolve-url-loader来解决这个问题,但我无法让它工作.

对like的导入@import "~../assets/fonts/MarkOT-ExtraLight/MarkOT-ExtraLight.css";只包含一个@font-face声明:

@font-face {
  font-family: 'MarkOT';
  src: url('MarkOT.eot?#iefix') format('embedded-opentype'),  url('MarkOT.otf')  format('opentype'),
     url('MarkOT.woff') format('woff'), url('MarkOT.ttf')  format('truetype'), url('MarkOT.svg#MarkOT') format('svg');
  font-weight: normal;
  font-style: normal;
}

这是我的webpack配置:

var webpack = require('webpack');
var path = require('path');
var ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {
  devtool: 'source-map',
  context: path.resolve(__dirname, '..'),
  entry: {
      app: path.resolve(__dirname, '../src/client/index.js'),
      vendors: ['react', 'react-dom', 'react-router']
  },
  output: {
    path: path.resolve(__dirname, '../dist'),
    pathInfo: true,
    filename: 'bundle.js',
    css: 'main.css'
  },
  module: {
     preLoaders: [
        {
         test: /\.js?$/,
         loader: "eslint-loader",
         exclude: /node_modules/
        }
    ],
     loaders: [
      {
        test: /src\/.+.js$/,
        exclude: /node_modules/,
        loader: 'babel',
        query: {
          presets: ['react', 'es2015', 'stage-0']
        }
      },
      { test: /\.jpe?g$|\.gif$|\.png$|\.svg$|\.woff$|\.ttf$/, loader: "file-loader" },
      { test: /\.scss?$/, loader: ExtractTextPlugin.extract('style', '!css?sourceMap!resolve-url!sass?output + encodeURIComponent(require('node-bourbon').includePaths) +
    '&includePaths[]=' + encodeURIComponent(require('node-neat').includePaths[1])) }
    ]
  },
  resolve: {
    modulesDirectories: [
      'src',
      'node_modules'
    ]
   },
   plugins: [
     new webpack.optimize.CommonsChunkPlugin('vendors', 'vendors.js'),
     new ExtractTextPlugin('main.css')
  ]
 };

这一行尤其适合处理我的风格:

{ test: /\.scss?$/, loader: ExtractTextPlugin.extract('style', '!css?sourceMap!resolve-url!sass?output + encodeURIComponent(require('node-bourbon').includePaths) +
    '&includePaths[]=' + encodeURIComponent(require('node-neat').includePaths[1])) }

正如它在resolve-url-loader网站上所说的那样,我在源代码sasscss加载器中都包含了源代码(以及包含波旁威士忌和整齐库的路径,所有这些都加载得很好).

有什么明显的东西我想念我看不到吗?

编辑:

我能够通过创建一个要解决这个问题_font.scss在同一个目录文件_var.scss,所有的移动@font-face声明到_font.scss,然后替换的所有实例urlrequire字体声明里.

我不喜欢我无法弄清楚为什么另一个人正在工作,但它的工作原理很好.我发现有趣的是,这url不起作用,我的印象就是css-loader照顾它.



1> Mostafa Fate..:

在你的webpack.config中

  resolve: {
    modulesDirectories: [ 'src', 'node_modules' ],
    alias: {
      styles: /*put the base folder of your styles here*/
    }
  }

然后在样式表导入中使用@styles然后使用相对路径

@import '~styles/yourStyle.scss';

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有