我有一个用ES6编写组件,通过Babel和Webpack进行转义的React应用程序。
在某些地方,我想在具体组件中包含特定的CSS文件,就像react webpack cookbook中建议的那样。
然而,如果在任何组件文件中我需要静态的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文件,那么Babel加载器将会将其解释为另一个源,并试图将CSS转换为Javascript。
这是预期的吗?有没有办法实现这一点-允许已转换的文件明确引用不需要转换的静态资源?
我已经为.js/jsx和CSS资产指定了加载器,如下所示:
module: {
loaders: [
{ test: /\.css$/, loader: "style-loader!css-loader" },
{ test: /\.(js|jsx)$/, exclude: /node_modules/, loader: 'babel'}
]
}
以下是详细信息:
webpack.common.js - 我使用的基础webpack配置,以便在开发和生产之间共享属性。
Gruntfile.js - 用于开发的Gruntfile。正如您所看到的,它需要上面的webpack配置,并添加了一些开发属性。这可能会导致问题吗?
Html.jsx - 我的HTML jsx组件尝试导入/要求CSS。这是一个同构应用程序(使用Fluxbile),因此需要将实际的HTML作为呈现的组件。在应用程序的任何部分中使用此文件中看到的要求语句会导致上述错误。
似乎与grunt有关。如果我只使用webpack --config webpack.common.js
编译,则不会出现错误。