У меня есть приложение React с компонентами, написанными на ES6, - переданные через Babel и Webpack.
В некоторых местах я хотел бы включить определенные файлы CSS с конкретными Компонентами, как предложено в ответить на веб-кухню cookbook
Однако, если в любом файле Component мне нужен статический ресурс CSS, например:
import '../assets/css/style.css';
Тогда компиляция завершится с ошибкой:
SyntaxError: <PROJECT>/assets/css/style.css: Unexpected character '#' (3:0)
at Parser.pp.raise (<PROJECT>\node_modules\babel-core\lib\acorn\src\location.js:73:13)
at Parser.pp.getTokenFromCode (<PROJECT>\node_modules\babel-core\lib\acorn\src\tokenize.js:423:8)
at Parser.pp.readToken (<PROJECT>\node_modules\babel-core\lib\acorn\src\tokenize.js:106:15)
at Parser.<anonymous> (<PROJECT>\node_modules\babel-core\node_modules\acorn-jsx\inject.js:650:22)
at Parser.readToken (<PROJECT>\node_modules\babel-core\lib\acorn\plugins\flow.js:694:22)
at Parser.pp.nextToken (<PROJECT>\node_modules\babel-core\lib\acorn\src\tokenize.js:98:71)
at Object.parse (<PROJECT>\node_modules\babel-core\lib\acorn\src\index.js:105:5)
at exports.default (<PROJECT>\node_modules\babel-core\lib\babel\helpers\parse.js:47:19)
at File.parse (<PROJECT>\node_modules\babel-core\lib\babel\transformation\file\index.js:529:46)
at File.addCode (<PROJECT>\node_modules\babel-core\lib\babel\transformation\file\index.js:611:24)
Похоже, что если я попробую и потребую файл CSS в файле Component, тогда загрузчик Babel будет интерпретировать это как другой источник и попытаться перевести CSS в Javascript.
Ожидается ли это? Есть ли способ достичь этого - позволяя переделанным файлам явно ссылаться на статические активы, которые не должны быть переписаны?
Я указал загрузчики как для .js/jsx, так и для атрибутов CSS следующим образом:
module: {
loaders: [
{ test: /\.css$/, loader: "style-loader!css-loader" },
{ test: /\.(js|jsx)$/, exclude: /node_modules/, loader: 'babel'}
]
}
Открыть полный файл конфигурации webpack
ПОЛНАЯ ДЕТАЛИ НИЖЕ:
webpack.common.js - Базовая конфигурация webpack, которую я использую, поэтому я могу делиться свойствами между dev и production.
Gruntfile.js - Gruntfile, используемый для разработки. Как вы видите, для этого требуется конфигурация webpack выше и добавляет к ней некоторые свойства разработки. Может ли это вызвать проблему?
Html.jsx - Мой компонент HTML jsx, который пытается импортировать/требовать CSS. Это изоморфное приложение (с использованием Fluxbile), поэтому необходимо иметь фактический HTML как обработанный компонент. Используя инструкцию require, увиденную в этом файле, в любой части моего приложения выдает описанную ошибку.
Кажется, что-то связано с хрюканьем. Если я просто скомпилирован с webpack --config webpack.common.js
, то я не получу ошибок.
Короткий ответ. Это ошибка node. Попытка загрузить CSS на сервере в изоморфных приложениях не является хорошей идеей.