@Magtir

Angular + Webpack + SCSS + Autoprefixer?

Мой webpack.config.js

spoiler
const path = require('path');
const webpack = require('webpack');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); // плагин минимизации
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const autoprefixer = require('autoprefixer');

module.exports = {
  entry: {
    'polyfills': './src/polyfills.ts',
    'app': './src/main.ts'
  },
  mode: "development",
  // mode: "production",
  output:{
    path: path.resolve(__dirname, 'dist'),     // путь к каталогу выходных файлов - папка public
    publicPath: '/',
    // filename: '[name].[hash].js'
    filename: '[name].js'
  },
  devServer: {
    compress: true,
    port: 9000,
    watchContentBase: true,
    progress: true,
    historyApiFallback: true,
  },
  resolve: {
    extensions: ['.ts', '.js']
  },
  module:{
    rules:[
      {
        test: /\.ts$/,
        use: [
          {
            loader: 'awesome-typescript-loader',
            options: { configFileName: path.resolve(__dirname, 'tsconfig.json') }
          } ,
          'angular2-template-loader'
        ]
      },
      {
        test: /\.html$/,
        loader: 'html-loader'
      },
      {
        test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/,
        loader: 'file-loader?name=assets/[name].[ext]'
      },
      {
        test: /\.(css|sass|scss)$/,
        exclude: path.resolve(__dirname, 'src/app'),
        use: [
          'style-loader',
          'css-loader',
          {
            loader: 'postcss-loader',
            options: {
              plugins: [
                autoprefixer({
                  browsers:['ie >= 8', 'last 4 version']
                })
              ],
              sourceMap: true
            }
          },
          {
            loader: 'sass-loader'
          },
          {
            loader: 'raw-loader'
          },
        ]
      },
    ]
  },
  plugins: [
    new webpack.ContextReplacementPlugin(
      /angular(\|\/)core/,
      path.resolve(__dirname, 'src'), // каталог с исходными файлами
      {} // карта маршрутов
    ),
    new HtmlWebpackPlugin({
      template: 'src/index.html'
    }),
    new MiniCssExtractPlugin({
      filename: "[name].css"
    }),
    new UglifyJSPlugin(),
    new webpack.NoEmitOnErrorsPlugin(),
    new webpack.LoaderOptionsPlugin({
      htmlLoader: {
        minimize: false
      }
    })
  ]
};



С разных источников составлен.
Первая проблема SCSS
Когда запускаю сервер webpack он в конце ругается
ERROR in ./src/app/app.component.scss 1:3
Module parse failed: Unexpected token (1:3)
You may need an appropriate loader to handle this file type.
> h1 {
|   background: red;
| }

В итоге сервер не запускается

И вторая проблема, но она не критичная, но раздражает)
WARNING in ./node_modules/@angular/core/fesm5/core.js 18349:15-36
Critical dependency: the request of a dependency is an expression
 @ ./src/main.ts
 @ multi (webpack)-dev-server/client?http://localhost:9000 ./src/main.ts


При этом сервер запускается, но предупреждает, что были ошибки
Подскажите пожалуйста, чего я не так сделал? Чего исправить?
  • Вопрос задан
  • 618 просмотров
Решения вопроса 1
usyninis
@usyninis
react-эксперт
у тебя в конфиге стоит exclude: path.resolve(__dirname, 'src/app'), - это означает что для файлов типа test: /\.(css|sass|scss)$/, в указанной папке у тебя не будет срабатывать данное правило

В ошибке мы видим путь как раз к файлу, который лежит в исключенной папке:
ERROR in ./src/app/app.component.scss 1:3

поменяй exclude на include, либо совсем убери (зависит от того, есть ли еще в других папках используемые файлы css|sass|scss)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы