当前位置: 首页 > 面试题库 >

在同构React组件中导入CSS文件

邹昊
2023-03-14
问题内容

我有一个带有ES6编写的组件的React应用程序-通过Babel和Webpack进行了编译。

在某些地方,我想包含特定CSS文件和特定组件,如react
webpack手册中
所建议

但是,如果在任何组件文件中,我都需要静态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)

看来,如果我尝试在Component文件中要求CSS文件,那么Babel加载程序会将其解释为另一个来源,并尝试将CS​​S转换为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配置,因此我可以在开发人员和生产人员之间共享属性。

Gruntfile.js-用于开发的Gruntfile。如您所见,它需要上面的webpack配置并向其中添加一些开发属性。这可能引起问题吗?

Html.jsx-我的HTML
jsx组件,尝试导入/获取CSS。这是一个同构应用程序(使用Fluxbile),因此需要使用实际的HTML作为呈现的组件。在我的应用程序的任何部分中,使用此文件中看到的require语句,都会给出所描述的错误。

这似乎与咕unt有关 。如果我只是编译,webpack --config webpack.common.js那么我不会出错。

简短答案 :这是节点运行时错误。在同构应用程序中尝试在服务器上加载CSS并不是一个好主意。


问题答案:

您不需要在服务器上呈现的组件中使用CSS。处理它的一种方法是在需要CSS之前检查它是否是浏览器。

if (process.env.BROWSER) {
  require("./style.css");
}

为了使人们有可能,你应该设置process.env.BROWSERfalse(或删除)在服务器 server.js

delete process.env.BROWSER;
...
// other server stuff

并将其设置true为浏览器。您可以在配置中使用webpack的DefinePlugin- webpack.config.js

plugins: [
    ...
    new webpack.DefinePlugin({
        "process.env": {
            BROWSER: JSON.stringify(true)
        }
    })
]

您可以在行动gpbl我们看看这个Isomorphic500应用。



 类似资料:
  • 问题内容: 我想将CSS文件导入React组件。 我已经尝试过,但是下面出现错误; 找不到模块:错误:无法解析c:\ Users \ User \ User \ Documents \ pizza-app \ client \ src \ components @中的“文件”或“目录” ../../../public/styles/disabledLink。 /client/src/compone

  • 问题内容: 我正在尝试在React组件中加载language.json文件。当我想导入json文件时,第一步出现以下错误。这是错误: 我正在使用webpack,这是配置文件: 并且我已经安装了以下软件包: 这就是我尝试导入文件(ES6格式)的方式: 另外,我检查了json文件格式并进行了验证!那么,您认为问题出在哪里? 问题答案: azium是正确的,需要加载程序,但这是很好的配置: npm命令

  • 我想将CSS文件导入react组件。 我已经尝试但我得到下面的错误; 找不到模块:错误:无法解析文件或目录.../.../.../Public/style/disabledLink in c:\用户\用户\文档\pisa-app\Client\src\组件@./Client/src/组件/ShoppingCartLink.js19:20-66哈希: 2d281bb98fe0a961f7c4版本:

  • 问题内容: 我是React的新手,正在尝试从外部文件导入JSON 变量。我收到以下错误: 找不到模块“ ./customData.json” 有人可以帮我吗?如果我的变量位于外部JSON文件中,但没有该变量,则它可以工作。 index.js hobbies.js profile.js customData.json 问题答案: 一种不错的方法(不添加伪造的.js扩展名,用于代码而不用于数据和配置)

  • 问题内容: 我有几个具有以下CSS /组件结构的组件 我将CSS导入组件中,如下所示 但是,CSS被导入到本节中,并保持全局范围。 我期望CSS是: 组件作用域,即样式仅应用于 仅 在此组件内呈现的内容。 如果卸载该组件,该组件的样式将消失。 但是,从浏览器进行检查时,样式在该部分指定,并应用于所有组件 如何导入CSS进行组件作用域?似乎我不正确地理解React ES6中的CSS导入。 我正在关注

  • 问题内容: 与 哪个更好,为什么? 还是除了以后编写更少的代码外没有其他区别? 写作是否意味着只导入Component对象? 问题答案: 让您代替。它减少了React名称空间的键入和重复,这通常是一种理想的现代编码约定。 此外,Webpack 2和Rollup之类的工具会“摇晃”,这意味着任何未使用的导出都不会捆绑到您的最终代码中。使用/,您可以保证所有React的源代码都将被捆绑。使用,某些工具