Webpack Sass - 无法解析图像

LeB*_*eau 21 javascript webpack sass-loader

我正在尝试通过 webpack 编译我的 Sass。编译正常的 sass 没问题,但出现错误。

 Module not found: Error: Can't resolve '../img/twitter.svg' in '/Users/Steve/mywebsite/scss'
     @ ./~/css-loader!./~/sass-loader/lib/loader.js!./scss/main.scss 6:94501-94530
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个问题?或者,有没有办法将 sass 编译器的级别设置为不那么严格以忽略某些错误

下面是我目前的配置。

const path = require("path");
const ExtractTextPlugin = require("extract-text-webpack-plugin");

module.exports = {
  resolve: {
    alias: {
      masonry: "masonry-layout",
      isotope: "isotope-layout",
    },
  },

  entry: "./main.js",
  output: {
    path: path.resolve(__dirname, "./dist/dist2"),
    filename: "bundle.js",
  },

  module: {
    rules: [
      {
        test: /\.(png|jpg|svg)$/,
        include: path.join(__dirname, "/dist/img"),
        loader: "url-loader?limit=30000&name=images/[name].[ext]",
      },
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: "babel-loader?presets[]=es2015",
      },

      {
        test: /\.scss$/,
        use: ExtractTextPlugin.extract({
          use: ["css-loader", "sass-loader"],
        }),
      },

      {
        test: /\.vue$/,
        loader: "vue-loader",
        options: {
          loaders: {},
          // other vue-loader options go here
        },
      },
    ],
  },

  plugins: [
    // new webpack.optimize.UglifyJsPlugin(),
    new ExtractTextPlugin("ross.css"),
  ],
};
Run Code Online (Sandbox Code Playgroud)

Ola*_*lip 32

我知道这已经很晚了,但是对于任何正在寻找解决此错误的方法的人来说;在我的情况下,图像在模板中完美加载,但是,Webpack 返回错误:Module not found: Error: Can't resolve './path/to/assets.png'

修复/解决方法:

添加?url=false到您的 css-loader 中,这将禁用 css-loader 的 url 处理:

...
{
  loader: "css-loader?url=false"
},
...
Run Code Online (Sandbox Code Playgroud)

  • 或者将 url 选项设置为 false `{ loader: 'css-loader', options: { url: false } }` (6认同)

dav*_*ave 5

我没有任何运气url-loader,并file-loader在对方的回答建议。我能够解决它使用resolve-url-loader

module: {
  rules: [
    { // sass / scss loader for webpack
      test: /\.(sass|scss|svg|png|jpe?g)$/, //Make sure to allow all necessary file types here
      use: ExtractTextPlugin.extract({
        use: [
            {
              loader: 'css-loader',
              options: {
                importLoaders: 1,
                minimize: true,
                sourceMap: true
              }
            },
            {
              loader: 'postcss-loader',
              options: {
                sourceMap: true
              }
            },
            {
              loader: "resolve-url-loader", //resolve-url-loader needs to come *BEFORE* sass-loader
              options: {
                sourceMap: true
              }
            },
            {
              loader: "sass-loader",
              options: {
                sourceMap: true
              }
            }
        ]
      })
    }
  ],
},
Run Code Online (Sandbox Code Playgroud)


Wit*_*ult 0

您尚未为 webpack 文件中的图像指定任何加载器。

  1. 安装url-loaderfile-loader到你的package.json

通过

npm install --save url-loader file-loader
Run Code Online (Sandbox Code Playgroud)
  1. 在你的 webpack 配置文件中添加以下内容 -

    {
            test    : /\.(png|jpg|svg)$/,
            include : path.join(__dirname, 'img'),
            loader  : 'url-loader?limit=30000&name=images/[name].[ext]'
        }, // inline base64 URLs for <=30k images, direct URLs for the rest
    
    Run Code Online (Sandbox Code Playgroud)

  • 谢谢回复。为什么我必须加载它们?我不打算压缩它们或用它们做任何其他事情。看来 webpack 真的只是检查它们是否存在?这在某些情况下可能有用,但不是全部。还是我理解错了。 (2认同)