2017-02-16 2 views
1

Я пытаюсь использовать Webpack вместо Gulp в качестве задачи, в этом случае просто компилируя все файлы SCSS, поскольку я делал это с Compass раньше. Основными задачами являются:Webpack 2: скомпилировать SASS и игнорировать «Модуль не найден: ошибка: не удается разрешить» ./assets/image.png «

  1. запустить Autoprefixer и создать отдельный файл CSS для каждого SCSS, который не является частичным
  2. не связывайте изображения или сцепить CSS файлы
  3. сохранить URL изображений как, например, background-image: url(assets/image.png)
  4. не бросать ошибки, если изображения не могут быть найдены

# 1 решена и работа, однако она перестает работать и выдает ошибку, как только SCSS ссылки на изображения, как в # 3 выше:

ERROR in ./~/css-loader!./~/postcss-loader!./~/sass-loader/lib/loader.js!./scss/style.scss 
Module not found: Error: Can't resolve './assets/image.png' in 'C:\Users\robro\projects\...\my-project\dev\styles\scss 
@ ./~/css-loader!./~/postcss-loader!./~/sass-loader/lib/loader.js!./scss/style.scss 6:15328-15369 
@ ./scss/style.scss 

Я хотел бы «просто» игнорировать эту ошибку и не нужно копировать недостающие файлы на локальный жесткий диск. Это в основном просто я упрямый, думая «Компас не нуждался в этих изображениях, чтобы присутствовать, почему Webpack?»

Вот мои настройки:


webpack.config.js

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

var ExtractCSS = new ExtractTextPlugin('css/[name]'); 

module.exports = { 
    entry: { 
     'style.css': './scss/style.scss', 
     'admin.css': './scss/admin.scss' 
    }, 
    output: { 
     filename: './css/[name]' 
    }, 
    module: { 
     rules: [ 
      { 
       test: /\.scss$/, 
       use: ExtractCSS.extract({ 
        fallback: "style-loader", 
        use: [ 
         "css-loader", 
         "postcss-loader", 
         "sass-loader" 
        ] 
       }) 
      }, 
      { test: /\.(jpg|jpeg|png|svg|gif|woff|woff2|otf|ttf)$/, use: 'ignore-loader' } 
     ] 
    }, 
    plugins: [ 
     ExtractCSS 
    ], 
    watch: true 
}; 

package.json

{ 
    "dependencies": {}, 
    "devDependencies": { 
     "css-loader": "^0.26.1", 
     "extract-text-webpack-plugin": "^2.0.0-rc.3", 
     "ignore-loader": "^0.1.2", 
     "node-sass": "^4.5.0", 
     "postcss-loader": "^1.3.0", 
     "sass-loader": "^6.0.0", 
     "style-loader": "^0.13.1", 
     "webpack": "^2.2.1", 
     "webpack-dev-server": "^2.3.0" 
    } 
} 

Как вы можете видеть, я попытался использовать ignore-loader, чтобы остановить sass-loader от жалоб на недостающие изображения, но безрезультатно. Честно говоря, я даже не уверен, что это то, как он предназначен для использования.

Как только я удалить все строки, ссылки на изображения из SCSS, все работает просто отлично: style.css и admin.css построению, autoprefixed и упал в css/ папку. Теперь я хочу сохранить его таким образом, но также использовать такие стили, как background-image: url(assets/image.png), без webpack, жалующихся на то, что эти изображения не присутствуют в файловой системе.

+0

Почему вы просто не используете загрузчик/загрузчик файлов и загружаете изображения? -Я не понимаю, почему вы используете изображения в ваших CSS-файлах, которые вам не нужны/нужны ... – thesublimeobject

+0

Может быть, я мог/должен. Наверное, я пытаюсь сделать что-то таким образом, что Webpack не предназначен для этого. Настройка этого с помощью Gulp заняла 30 минут, и он не жалуется на недостающие изображения. И это не должно быть imho, если я явно не выполняю какую-то команду «проверить все мои активы», которая имеет встроенный Webpack. Это просто предназначено, чтобы быть доказательством концепции, понимая различия между инструментами. – robro

+0

webpack не предназначен для того, чтобы делать то же самое, что и gulp. – thesublimeobject

ответ

0

Корпус закрыт: Webpack НЕ РАБОТАЕТ. Сообщения в блогах, называя Webpack как преемника Grunt или Gulp, или не могут явно указывать на то, что эти инструменты могут иметь некоторые перекрывающиеся функции, но в итоге имеют очень разные цели. Grunt and Gulp - это бегуны задач, а Webpack - это связующее звено. Попытка сделать Webpack не связывает ваши активы с поражениями, это основная цель, и вам лучше выбрать другой инструмент.

+0

Попробуйте прочитать официальную документацию Loaders for Wepack (https://webpack.js.org/concepts/loaders/), где указано: _Loaders - это преобразования, которые применяются к исходному коду модуля. Они позволяют предварительно обрабатывать файлы при импорте или загрузке. Таким образом, погрузчики вроде как «задачи» в других инструментах сборки и обеспечивают эффективный способ обработки начальных этапов сборки. , а затем сообщите нам, если вы все еще думаете то же самое. –

Смежные вопросы