我已经阅读了我的“公共”目录在哪里?文档。
公共目录通常是服务器的根目录(即 ./build、./public 或 ./dist)。该目录通常提交给 Git,Mock Service Worker 也应该如此。
./dist
当我们使用 webpack 将源代码编译到output.path: './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 开发服务器并访问我的应用程序时,它们都可以工作。我得到了正确的嘲笑回应。
在目录中生成mockServiceWorker.js
文件./src/
:
⚡ npx msw init ./src
package.json
用以下内容覆盖
"msw": {
"workerDirectory": "src"
}
在目录中生成./dist
目录和mockServiceWorker.js
文件./dist/
。
⚡ npx msw init ./dist
但是,./dist/
文件中的.gitignore
目录,不会提交给 Git。
webpack-dev-server
编译后不写任何输出文件。相反,它将捆绑文件保存在内存中。这意味着在CLI 生成它之前没有真正的./dist
目录。msw
此外,./dist
将来可以删除该文件以重新编译。
那么,这样使用的时候webpack-dev-server
,MSW
初始化的公共目录应该是什么呢?