【发布时间】:2015-08-01 14:03:10
【问题描述】:
我有一个使用 ES6 编写的组件的 React 应用程序 - 通过 Babel 和 Webpack 进行转译。
如react webpack cookbook 中所建议的,在某些地方我想包含带有特定组件的特定 CSS 文件
但是,如果在任何组件文件中我需要静态 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 作为渲染组件。在我的应用程序的任何部分使用此文件中看到的 require 语句,都会给出描述的错误。
好像和咕噜声有关。如果我只是用webpack --config webpack.common.js 编译,那么我不会收到任何错误。
简答:这是一个节点运行时错误。尝试在同构应用程序中的服务器上加载 CSS 不是一个好主意。
【问题讨论】:
-
你的配置没问题。我尝试在包含 css 的应用程序上运行它并且它有效。检查其他东西-也许您使用完全不同的配置文件运行 webpack :) 或者软件包有问题。发布更多信息 - 你的 package.json,你如何运行 webpack 等等。也许我们会弄清楚。
-
谢谢,我在上面提供了更多信息。这个问题似乎是在咕噜声中引起的,因为直接通过 webpack 编译就可以了。
-
在 gruntfile 中
console.log()你的webpackConfig可能会很有趣
标签: javascript reactjs webpack babeljs