reactjs - 如何根据特定需求重写 webpack 加载器?

标签 reactjs webpack webpack-2 babel-loader raw-loader

我正在构建一个文档网站,我想在其中显示演示代码片段。

对于样式,它真的很简单,因为我的应用程序仅包含 main.scss,所以我正在使用所有必要的加载器来处理该文件来编译它,以及任何其他使用 raw-loader 加载 scss 文件以获取纯文本文件。

我遇到的问题是目前对我的组件执行相同的操作。与我的样式不同,当我想使用 babel-loader 渲染组件时,我需要包含组件,但我也想将它们作为纯文本导入以用于演示展示。

起初我想在 require 级别妥协使用内联加载器

const componentCode = require('raw-loader!./path/to/component');

这种方法的问题是,当我尝试执行此导入时,该文件已经通过 babel-loader 运行,因此我得到的是文件的编译版本而不是原始版本。我尝试将 ?enforce=pre 作为查询参数传递给 raw-loader 内联,但这没有效果。

我想知道是否有一种方法可以定义规则来覆盖 import/require 语句。

根据webpack文档

It's possible to overwrite any loaders in the configuration by prefixing the entire rule with !.

但是,我找不到任何这样的例子。我尝试了以下方法,它编译但在第一个 ! 前缀的 require 之后立即崩溃,没有任何错误

webpack.coonfig.js

{
    test: /\.(js|jsx)$/,
    exclude: [/node_modules/],
    use: [
      {
        loader: 'babel-loader',
        options: {
          presets: ['env', 'react'],
        },
      },
    ],
  },
  {
    test: /!*\.(js|jsx)$/,
    enforce: "pre",
    use: [
      {
        loader: 'raw-loader',
      },
    ],
  },

文件.jsx

  const componentCode = require('raw-loader!./path/to/component');

我还考虑过使用 fs 读取文件,但不确定这是否可行。最后,代码将由 webpack 完整编译,并且仅发布包。这是正确的方法吗?

最佳答案

Webpack - ignore loaders in require()? 找到我的答案,基本上我需要!!在要求忽略预加载器并应用我的之前

关于reactjs - 如何根据特定需求重写 webpack 加载器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49513157/

相关文章:

javascript - react : Nested State Not getting Updated

javascript - 在 React.js 中更改组件的父级

reactjs - Express.js : Set cache-control header for static assets bundled in webpack

javascript - 在 Webpack2 中运行 Webpack-Dev-Server

webpack - 仅针对 Webpack 中的特定入口点输出样式表而不生成任何脚本?

node.js - 直接在应用程序(webpack)的入口点导入文件加载器。感叹号是什么?

node.js - 如果不将服务器 uri 传递给客户端的 io(),则无法使用 SocketIO

javascript - 如果最终用户仍然无法获得所有这些信息,那么节点模型文件夹为何如此之大?

angularjs - 在 webpack 4 中加载 AngularJS html 模板渲染 [object Module]

javascript - vuejs 中缺少 webpack 配置