Webpack не удаляет этот неиспользуемый импорт при создании рабочей сборки в моем приложении next.js.
Я отметил sideEffects: false
в @shared/graphql.mock
package.json
файл:
import { MockData } from '@shared/graphql.mock'
const should = (
fn,
) => {
if (process.env.NODE_ENV !== 'production') {
return fn
}
}
/*#__PURE__*/ const mockData = should(() => MockData)()
вывод веб-пакета:
const should = (fn)=>{
if (false) {}
};
/*#__PURE__*/ const mockData = should(() => _shared_graphql_mock_DATA__WEBPACK_IMPORTED_MODULE_2__.N[0])();
Здесь добавлен пример репозитория: https://codesandbox.io/p/devbox/turborepo-template-forked-qzgpmn?file=%2Fapps%2Fweb%2F.next%2Fserver%2Fpages%2Fapi%2Ftest.js%3A81% 2C1-95%2C1&добро пожаловать=истина
Видеть:
packages/server/server.ts
apps/web/pages/api/test.ts
Выход:
apps/web/.next/server/pages/api/test.js
@TusharShahi не уверен, что понимаю, это объект JSON, содержащий фиктивные данные
Аннотацию для краткого описания следует размещать перед оператором, чтобы пометить вызов функции как свободный от побочных эффектов.
const mockData = /*#__PURE__*/ should(() => _shared_graphql_mock_DATA__WEBPACK_IMPORTED_MODULE_2__.N[0])();
Причина, по которой веб-пакет не удаляет неиспользуемые функции в вашей сборке, заключается в том, что опция свертывания отключена. Вам необходимо включить веб-пакет, чтобы использовать плагин terser.
Обратитесь к опции неиспользуемый в разделе параметров сжатия, чтобы узнать о минимайзере, который облегчает это.
В next.config.js
,
module.exports = {
reactStrictMode: true,
transpilePackages: ["ui"],
webpack: (config) => {
// config.optimization.minimize = false;
return config;
},
};
Я так пробовал, тоже не помогло
Я не могу воспроизвести проблему, когда аннотация находится перед вызовом функции, но она воспроизводится, когда она есть в начале оператора. Моя версия — Next.js v14.2.5. Также я не устанавливаю параметр «sideEffects» в package.json.
Спасибо, я добавил пример репозитория - до сих пор не могу исключить его из окончательного пакета.
Я заглянул в репозиторий и обнаружил, что в конфигурации вашего веб-пакета опция свертывания отключена. В чем причина этого?
Отключил его, чтобы можно было легко проверить комплект, может ли это вызвать проблему?
Да, это также отключает минимайзер. Вы можете настроить TerserPlugin для минимизатора, если хотите, чтобы имена переменных оставались неизменными.
Давайте продолжим обсуждение в чате.
_shared_graphql_mock_DATA__WEBPACK_IMPORTED_MODULE_2__
это? это выглядит как целый модуль, а не какая-то конкретная функция. как оно вообще могло работать