如何在 Webpack 构建过程中将 React 应用程序中的 mockServiceWorker.js 文件复制到我的构建文件夹

Posted

技术标签:

【中文标题】如何在 Webpack 构建过程中将 React 应用程序中的 mockServiceWorker.js 文件复制到我的构建文件夹【英文标题】:How copy down mockServiceWorker.js file in React application during Webpack build proces to my build folder 【发布时间】:2021-12-31 07:17:55 【问题描述】:

我尝试为我的 React 项目设置 Mock Service Worker。我的项目没有使用CRA。

我想拦截 GraphQL 请求并模拟它的响应,以便使用赛普拉斯创建 end 2 end 测试。

我如何将mockServiceWorker.js 文件复制到我的构建文件夹(使用 Webpack),就像其他资产图像和字体等一样?

我使用了命令npx msw init build --save。然后mockServiceWorker.js 就创建好了。

但是一旦我运行npm start 并且我的客户端和服务器被编译,文件mockServiceWorker.js 就会消失?

我还需要msw 在我们的验收环境的管道中,以便也在管道中运行赛普拉斯端 2 端测试。

【问题讨论】:

【参考方案1】:

您不一定需要复制工作脚本。在大多数情况下,您使用 MSW 作为开发工具。如果您让 webpack 为您的开发包提供服务,您可能会使用 webpack-dev-server 来提供该包。 Webpack Dev Server 支持 static.directory 选项(以前在 webpack 4 中为 contentBase),它指向项目中的本地目录,该目录应作为开发服务器的公共目录。这就是你需要initialize the worker into的地方。

$ npx msw init ./public --save

如果您确实使用 Webpack Dev Server,请确保将其指向正确的公共目录。其中一种方法是在您的webpack.config.js

// webpack.config.js
const path = require('path')

module.exports = 
  devServer: 
    static: 
      directory: path.resolve(__dirname, 'public')
    
  

请注意,如果您已经在提供静态资源,则无需添加任何额外的 webpack 配置。只需通过 npx msw init 将工作程序初始化到包含您的静态资产的同一目录中。

如果您通过其他方式为您的 webpack 构建提供服务,您可以利用 copy-webpack-plugin 将工作脚本从一个位置显式复制到另一个位置。但是,我很确定上面的开发服务器建议就是您所寻求的。

【讨论】:

以上是关于如何在 Webpack 构建过程中将 React 应用程序中的 mockServiceWorker.js 文件复制到我的构建文件夹的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Webpack 配置文件中将 CSS 名称设置为不是哈希?

如何使用 react webpack 设置 bootstrap 4 scss

优化Webpack构建性能的几点建议

优化 Webpack 构建性能的几点建议

Webpack2,如何从构建中排除 react 和 react dom

webpack+gulp 构建react项目