Сбой синтаксического анализа модуля: неожиданный символ ‘@’ (1: 0) Для обработки этого типа файлов может потребоваться соответствующий загрузчик

#css #typescript #webpack

#css #typescript #webpack

Вопрос:

У меня возникли некоторые проблемы. Я продолжаю получать эту ошибку

Сбой синтаксического анализа модуля: неожиданный символ ‘@’ (1: 0). Возможно, вам понадобится соответствующий загрузчик для обработки этого типа файлов, в настоящее время загрузчики не настроены для обработки этого файла. См. https://webpack.js.org/concepts#loaders @импортировать URL-адрес («https://cloud.typography.com/7374818/6819812/css/fonts.css «);

Я попробовал некоторые из предложенных решений, которые я нашел в Интернете, и, похоже, ни одно из них не работает. Вот как выглядит моя конфигурация Webpack

 const path = require('path');
const webpack = require('webpack');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const devMode = process.env.NODE_ENV !== 'production';

module.exports = {
  entry: {
    main: path.resolve(__dirname, './src/App.tsx'),
  },

  output: {
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'public'),
    sourceMapFilename: "[name].js.map"
  },

  externals: {
    'react': 'React',
    'react-dom': 'ReactDOM',
  },

  devtool: 'source-map',

  module: {
    rules: [
      {
        test: /.(js|jsx|ts|tsx)$/,
        exclude: /node_modules/,
        include: [
          path.resolve(__dirname, './src'),
        ],
        loader: 'babel-loader',
        options: {
          presets: ['@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript'],
        },
      },
      {
        test: /.(scss|css)$/,
        include: path.resolve(__dirname, './src'),
        use: [
          MiniCssExtractPlugin.loader,
          'style-loader',
          'css-loader',
          {
            loader: "postcss-loader",
            options: {
              plugins: () => [
                require("autoprefixer")()
              ],
            },
          },
          'sass-loader',
        ],
      },
      {
        test: /.(png|woff|woff2|eot|ttf|otf|svg)$/,
        loader: 'url-loader',
        options: {
          limit: 100000,
        }
      },
    ],
  },
  resolve: {
    extensions: ['.js', '.jsx', 'json', 'ts', 'tsx', '.scss'],
    alias: {
      src: path.resolve(__dirname, './src/'),
    },
  },
  devServer: {
    historyApiFallback: true,
    contentBase: './public',
    port: 3030,
    open: true,
    compress: true,
    hot: true,
  },
  optimization: {
    splitChunks: {
      chunks: 'all',
    },
  },
  plugins: [
    new MiniCssExtractPlugin({
      filename: devMode ? '[name].css' : '[name].[hash].css',
      chunkFilename: devMode ? '[id].css' : '[id].[hash].css',
    }),
    new CleanWebpackPlugin(),
    new webpack.HotModuleReplacementPlugin(),
  ],
};

  

Компонент выглядит следующим образом. uilib это локальная зависимость, которую я связываю с помощью yarn link

 import React from 'react';
import ReactDOM from 'react-dom';
import { Header, Footer } from 'uilib';
import 'uilib/index.css';

export const App: React.FC<{}> = () => (
  <>
    <Header/>
    <div>Hello in oct</div>
    <Footer/>
  </>
);

ReactDOM.render(
  <App />,
  document.getElementById('root'),
);

  

uilib/index.css выглядит следующим образом

 @import url("https://cloud.typography.com/7374818/6819812/css/fonts.css");
.header {
  height: 70px; 
}
  

Комментарии:

1. Ваша конфигурация webpack выглядит нормально. Можете ли вы поделиться файлом, в котором есть @import инструкция, я предполагаю, что это файл ulib / index.css.

2. да, это uilib/index.css. Это действительно большой файл, но я думаю, что он помечен из-за первой строки. Я добавил первую строку 4 строки

3. Где находится папка ulib по отношению к структуре проекта, я чувствую include: path.resolve(__dirname, './src') , что он должен искать в папке src ulib , а папка находится в корне проекта (вне папки src).

4. uilib находится за пределами корневого каталога проекта. uilib и каталог проекта являются братьями и сестрами

Ответ №1:

Я чувствую, что ulib папка, возможно, находится не внутри src каталога.

Можете ли вы попробовать изменить конфигурацию загрузчика webpack scss|css , чтобы она была такой:

       {
        test: /.(scss|css)$/,
        include: path.resolve(__dirname) // <---- leave it __dirname or remove the prop completely
        ....
        ....
      }

  

Я надеюсь, что это позволит webpack просмотреть корень проекта, что поможет ему соответствующим образом проанализировать файл.

Кроме того, если ulib node_modules он не включен, вы можете исключить его из загрузчика с помощью exclude: 'node_modules'

Комментарии:

1. uilib отсутствует в каталоге src. Это локальная зависимость, которую я связываю с использованием yarn link . Я попробовал ваше предложение, но оно не решило проблему

2. Казалось, я не понял вас раньше. Спасибо, я смог заставить его работать. Я удалил свойство include и добавил и исключил каталог node_modules, а затем он заработал.