#javascript #webpack #create-react-app #tree-shaking
#javascript #webpack #create-react-app #встряхивание дерева
Вопрос:
У меня есть приложение, основанное на Create-React-App. Во время разработки я часто настраиваю макет сервера API, запуская скрипт NPM, который задает переменную среды:
"start": "react-scripts start",
"start:mock-api": "cross-env REACT_APP_MOCK_API=true react-scripts start",
"build": "react-scripts build",
Этот параметр env определяет, должен ли макет сервера раскручиваться:
if (process.env.REACT_APP_MOCK_API === "true") {
/* eslint-disable import/no-extraneous-dependencies */
const { setupWorker } = require("msw");
const { handlers } = require("src/mockApi/serverHandlers");
setupWorker(...handlers).start();
}
Сегодня я создал сборку и получил это сообщение:
Размер пакета значительно больше рекомендованного
Я начал просматривать свой пакет и неожиданно наткнулся на искаженный вызов моего макета api setupWorker().start()
:
"true"===Object({NODE_ENV:"production",PUBLIC_URL:"",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!0,REACT_APP_ENV_NAME:"development"})
.REACT_APP_MOCK_API){var jd=n(54)
.setupWorker,Td=n(424).handlers;jd.apply(void 0,Object(i.a)(Td))
.start()}
Я предполагал, что во время сборки prod этот путь будет удален как мертвый код, но, очевидно, это не так. Это проблематично, поскольку у меня есть ссылки на большие файлы JSON в моем макетном API, и они попадают в комплект.
Есть мысли о том, как я могу исключить свой макет модуля api при создании производственной сборки?
Ответ №1:
Чтобы исключить эти условно требуемые модули, требуется, чтобы мы явно установили переменную env в нашем скрипте сборки:
"build": "cross-env REACT_APP_MOCK_API=false react-scripts build"