Dva: Problema de ruta con imágenes referenciadas en menos

Creado en 20 oct. 2016  ·  11Comentarios  ·  Fuente: dvajs/dva

faq question

Comentario más útil

Probado, hay dos soluciones:

  1. No use .less , use .css
  2. Agregue ~ prefijo a la URL, como background: ~"url(./bg.png)" no-repeat

Todos 11 comentarios

Tanto la importación como la necesidad están bien.

@bjwulin ¿Cómo importar o requerir bajo el archivo .less ?

Intenté introducir la imagen de fondo debajo del archivo .less .

.list {
  width: 100%;
  margin-bottom: .6rem;
  background: url('./bg.png') center no-repeat;
}

Cuando ejecuto npm start , la consola informa un error:

ERROR in ./~/css-loader?sourceMap&modules&localIdentName=[local]___[hash:base64:5]!./~/postcss-loader!./~/less-loader?{"sourceMap":true,"modifyVars":{}}!./src/routes/LoginPage.less
    Module not found: Error: Cannot resolve module 'bg.png' in /Users/mcbird/workspace/cedar-mobile/src/routes
     @ ./~/css-loader?sourceMap&modules&localIdentName=[local]___[hash:base64:5]!./~/postcss-loader!./~/less-loader?{"sourceMap":true,"modifyVars":{}}!./src/routes/LoginPage.less 6:304-321

La estructura del documento es la siguiente:
image

Mi archivo webpack.config.js es el siguiente:

const fs = require('fs');
const path = require('path');

module.exports = function(webpackConfig, env) {
  webpackConfig.babel.plugins.push('transform-runtime');

  // Support hmr
  if (env === 'development') {
    webpackConfig.devtool = '#inline-source-map';
    webpackConfig.babel.plugins.push(['dva-hmr', {
      entries: [
        './src/index.js',
      ],
    }]);
  } else {
    webpackConfig.babel.plugins.push('dev-expression');
  }

  // 引入 antd
  webpackConfig.babel.plugins.push(['import', {
    libraryName: 'antd-mobile',
    style: 'css',
  }]);

  // Support CSS Modules
  // Parse all less files as css module.
  webpackConfig.module.loaders.forEach(function(loader, index) {
    if (typeof loader.test === 'function' && loader.test.toString().indexOf('\\.less$') > -1) {
      loader.include = /node_modules/;
      loader.test = /\.less$/;
    }
    if (loader.test.toString() === '/\\.module\\.less$/') {
      loader.exclude = /node_modules/;
      loader.test = /\.less$/;
    }
    if (typeof loader.test === 'function' && loader.test.toString().indexOf('\\.css$') > -1) {
      loader.include = /node_modules/;
      loader.test = /\.css$/;
    }
    if (loader.test.toString() === '/\\.module\\.css$/') {
      loader.exclude = /node_modules/;
      loader.test = /\.css$/;
    }
  });

  return webpackConfig;
};

Descubrí que está bien poner la imagen por separado debajo de src/assets/
image
En este momento, la URL de la imagen en LoginPage.less escribe la ruta relativa directamente

.list {
  width: 100%;
  margin-bottom: .6rem;
  background: url("../assets/bg.png");
}

https://github.com/dvajs/dva/issues/96#issuecomment -247935310
Parece el mismo problema que este.

Después de varias depuraciones, se encuentra que la ruta de la imagen en el archivo *.less debe encontrarse en el directorio raíz . La siguiente imagen:
image
De acuerdo con nuestros hábitos habituales, generalmente solo escribe background: url("./bg.png"); directamente, pero aquí debes volver al directorio raíz y luego mirar hacia abajo.

Probado, hay dos soluciones:

  1. No use .less , use .css
  2. Agregue ~ prefijo a la URL, como background: ~"url(./bg.png)" no-repeat

Puede utilizar la interpolación de cadenas para introducir:
1. @imgUrl : "../ star.jpg"; Escribe la ruta de la imagen desde el directorio raíz, si es una imagen y un archivo menos, el archivo css está en un directorio, directamente @ I'mUrl: " estrella.jpg ";
2.background: url ("@ {imgUrl}"); Utilice el método de interpolación de cadenas para introducir de modo que pueda introducir imágenes estáticas, también puede utilizar ~ "" El fondo entre comillas es para evitar la compilación: ~ "url (' ../star .jpg ') ";

Es muy dificil de usar

background: ~"url('../star.jpg')" esta manera se puede usar en mi proyecto, otros no

fondo: ~ "url ('../ star.jpg')" disponible

Agregue ~ prefijo a la URL, como fondo: ~ "url (./ bg.png)" esto está disponible

¿Fue útil esta página
0 / 5 - 0 calificaciones