【发布时间】:2021-10-23 15:42:30
【问题描述】:
我已经阅读了Where is my "public" directory? 文档。
公共目录通常是服务器的根目录(即 ./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 开发服务器并访问我的应用程序时,它们都可以工作。我得到了正确的模拟响应。
在./src/目录下生成mockServiceWorker.js文件:
⚡ npx msw init ./src
用以下内容覆盖package.json
"msw": {
"workerDirectory": "src"
}
在./dist/目录中生成./dist目录和mockServiceWorker.js文件。
⚡ npx msw init ./dist
但是,.gitignore 文件中的./dist/ 目录,不会提交到 Git。
webpack-dev-server 编译后不写入任何输出文件。相反,它将捆绑文件保存在内存中。这意味着在msw CLI 生成它之前没有真正的./dist 目录。另外,./dist文件将来可以删除重新编译。
那么,像这样使用webpack-dev-server时,MSW初始化的公共目录应该是什么?
【问题讨论】:
标签: webpack webpack-dev-server msw