我已经阅读了我的“公共”目录在哪里?文件。
公共目录通常是服务器的根目录(即./build、./public或./dist)。这个目录经常被提交给Git,所以应该是Mock Service Worker。
我认为当我们使用webpack将源代码编译到output.path: './dist'
目录时,我们不应该将./dist
提交到Git。这让我很困惑。我尝试在浏览器环境中集成MSW
。webpack.config.js
:
const HtmlWebpackPlugin = require("html-webpack-plugin");
const path = require("path");
module.exports = {
entry: "./src/index.js",
output: {
path: path.resolve(__dirname, "./dist"),
filename: "index_bundle.js",
},
mode: "development",
plugins: [new HtmlWebpackPlugin({ template: "./src/index.html" })],
devServer: {
static: {
directory: path.join(__dirname, "dist"),
},
port: 9000,
},
module: {
rules: [
{
test: /\.m?js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env"],
},
},
},
],
},
};
src/index.js
:
window.onload = function () {
console.log(process.env.NODE_ENV);
if (process.env.NODE_ENV === "development") {
const { worker } = require("./mocks/browser");
worker.start();
}
fetch("https://jsonplaceholder.typicode.com/users/1")
.then((res) => res.json())
.then((res) => {
console.log(res);
});
};
src/index.html
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
</html>
src/mocks/browser.js
:
import { setupWorker } from "msw";
import { handlers } from "./handlers";
export const worker = setupWorker(...handlers);
src/mocks/handlers.js
:
import { rest } from "msw";
export const handlers = [
rest.get("https://jsonplaceholder.typicode.com/users/1", (req, res, ctx) => {
return res(ctx.status(200), ctx.json({ username: "teresa teng" }));
}),
];
我尝试了以下两种方法,当我使用npx webpack serve
命令启动webpack dev服务器并访问我的应用程序时,这两种方法都有效。我得到了正确的嘲笑回应。
在./src/
目录中生成mockServiceWorker.js
文件:
⚡ npx msw init ./src
用以下内容覆盖package.json
"msw": {
"workerDirectory": "src"
}
生成./dist
目录和./dist/
目录中的mockServiceWorker.js
文件。
⚡ npx msw init ./dist
但是,./dist/
目录在.gitignore
文件中,它不会提交到Git。webpack-dev-server
在编译后不会写入任何输出文件。相反,它将包文件保存在内存中。这意味着在msw
CLI生成./dist
目录之前,不存在真实的的./dist
目录。此外,./dist
文件可以在将来删除以重新编译。
那么,当像这样使用webpack-dev-server
时,MSW
初始化的公共目录应该是什么?
2条答案
按热度按时间osh3o9ms1#
当使用自定义服务器设置(如WDS)时,通常有一个选项告诉服务器使用哪个本地目录来提供静态资产。
在WDS的情况下,它是
devServer.static.directory
选项。它应该指向您创建的作为网站公共目录的 * 本地目录 *。您还可以指向您决定放置辅助脚本的任何其他现有目录。
通过导航到
http://localhost:9000/mockServiceWorker.js
并查看脚本文件的内容,验证工作脚本是否正确提供。xmakbtuz2#
我知道现在有点晚了,但我会给予需要帮助的人答案:
在
devServer
配置中,您已经将dist
目录作为公用文件夹。这是不正确的。dist
是我们的构建路径,只存在于生产环境中,所以devServer
与它无关。默认的公共目录是<root>/public
。所以你有两种方法:
1-移动你的
index.html
到public
文件夹并删除devServer
的配置(或更改配置以使用public
作为静态文件夹).现在你可以安全地运行``npx msw init public`了。2-将静态文件夹更改为根目录。
现在,您可以运行
npx msw init .
以使worker位于根目录上。我建议使用第一个选项,因为它更干净,更易于维护。