#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')
, что он должен искать в папке srculib
, а папка находится в корне проекта (вне папки 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, а затем он заработал.