Webpack, генерирующий URL другого файла для CSS url () - PullRequest
0 голосов
/ 26 сентября 2019

Я использую веб-пакет для компиляции и разработки моей темы Drupal с использованием Bootstrap 4. Я использую ее для объединения различных библиотек JS и для сборки sass в CSS, чтобы я мог использовать только те элементы Bootstrap, которые мне нужны, вместо всего shebang.

У меня есть исходная папка с папкой "js" и папкой "sass".

Мой webpack.config.json выглядит так:

const path = require('path');

module.exports = {
  mode: 'development',
  entry: [ './src/js/bootstrap.js', './src/sass/style.scss'],
  output: {
    filename: 'js/mytheme-libraries.js',
    path: path.resolve(__dirname, '.')
  },
  devtool: "source-map",
  module: {
    rules: [
      {
        test: /\.(scss)$/,
        use: [{
          loader: 'file-loader', // load files
          options: {
            name: 'style.css',
            outputPath: './css',
          },
        },
        {loader: 'extract-loader'},
        {
          loader: 'css-loader',
          options: {
            sourceMap: true
          }
        }, {
          loader: 'postcss-loader',
          options: {
            plugins: function () {
              return [
                require('autoprefixer')
              ];
            },
            sourceMap: true,
            sourceMapEmbed: false
          }
        }, {
          loader: 'sass-loader',
          options: {
            sourceMap: true,
            sourceMapEmbed: false,
            outFile: './css/style.map.css'
          }
        }]
      },
      {
        test: /\.(ttf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/,
        include: [
          path.resolve(__dirname, "./src/fonts")
        ],
        use: [{
          loader: 'file-loader',
          options: {
            name: '/sites/all/themes/mytheme/fonts/[name].[ext]',
            emitFile: false
          }
        }]
      },
      {
        test: /\.(png|jpg|gif|svg?)(\?[a-z0-9]+)?$/,
        exclude: [
          path.resolve(__dirname, "./src/fonts")
        ],
        use: [{
          loader: 'file-loader',
          options: {
            name: '/sites/all/themes/mytheme/img/[name].[ext]',
            emitFile: false
          }
        }]
      }
    ]
  }
};

и мой package.json

{
    "name": "mytheme",
    "version": "1.0.0",
    "description": "Tools for building Bootstrap for the Mytheme Theme.",
    "private": true,
    "scripts": {
        "build-dev": "webpack --config webpack.config.js",
        "cache-clear": "drush @dev cc all"
    },
    "author": "Pryrios",
    "license": "MIT",
    "dependencies": {
        "animated-scroll-to": "^1.3.1"
    },
    "devDependencies": {
        "autoprefixer": "^9.6.1",
        "bootstrap": "^4.3.1",
        "css-loader": "^3.2.0",
        "extract-loader": "^3.1.0",
        "file-loader": "^4.2.0",
        "jquery": "^3.4.1",
        "node-sass": "^4.12.0",
        "popper.js": "^1.15.0",
        "postcss-loader": "^3.0.0",
        "sass-loader": "^7.3.1",
        "webpack": "^4.41.0",
        "webpack-cli": "^3.3.9"
    }
}

, и я создаю свои активы, запустив "npm run build-dev", который вызывает "webpack --config webpack.config.js" и создает мой style.css и мой jsфайл.(Примечание: я не создаю файлы изображений / шрифтов, так как они уже находятся в папке внутри создаваемой темы, и на них ссылаются из папки src / sass "../..").

Теперь в одном из моих CSS-файлов я использую одно и то же фоновое изображение дважды:

.myfirst-div {
  background: url('../../img/point-bg.png') center 5px/2px 10px repeat-y;
}

.mysecond-div {
  background: url("../../img/point-bg.png") center 5px/2px 10px repeat-y;
}

Ожидаемый результат заключается в том, что оба CSS-объявления будут иметь вид:

.myfirst-div {
  background: url('/sites/all/themes/mytheme/img/point-bg.png') center 5px/2px 10px repeat-y;
}

.mysecond-div {
  background: url("/sites/all/themes/mytheme/img/point-bg.png") center 5px/2px 10px repeat-y;
}

Проблема:

Но я обнаружил, что у второго div есть другое изображение.Путь правильный, и изображение существует, но оно не объявлено в sass.Я исследовал, и изображение, которое возвращается, является следующим, объявленным в "url ()" в sass.

Я не понимаю, почему это происходит.Я совершенно новичок во всей этой среде webpack / nodejs, поэтому могу ошибаться во многих вещах.Я пытался использовать --profile при вызове веб-пакета, чтобы попытаться проверить что-то не так, но безрезультатно.

anyone Может кто-нибудь указать мне, куда я вверты? ¿Или, по крайней мере, предложить, как я могу отладить дальше этот

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...