Webpack не встряхивает неиспользуемый импорт

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.tsapps/web/pages/api/test.ts

Выход: apps/web/.next/server/pages/api/test.js

_shared_graphql_mock_DATA__WEBPACK_IMPORTED_MODULE_2__ это? это выглядит как целый модуль, а не какая-то конкретная функция. как оно вообще могло работать
Tushar Shahi 14.08.2024 12:05

@TusharShahi не уверен, что понимаю, это объект JSON, содержащий фиктивные данные

neeko 14.08.2024 12:09
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Аннотацию для краткого описания следует размещать перед оператором, чтобы пометить вызов функции как свободный от побочных эффектов.

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;
  },
};

Я так пробовал, тоже не помогло

neeko 14.08.2024 12:41

Я не могу воспроизвести проблему, когда аннотация находится перед вызовом функции, но она воспроизводится, когда она есть в начале оператора. Моя версия — Next.js v14.2.5. Также я не устанавливаю параметр «sideEffects» в package.json.

Oluwafemi Sule 14.08.2024 12:46

Спасибо, я добавил пример репозитория - до сих пор не могу исключить его из окончательного пакета.

neeko 14.08.2024 14:11

Я заглянул в репозиторий и обнаружил, что в конфигурации вашего веб-пакета опция свертывания отключена. В чем причина этого?

Oluwafemi Sule 14.08.2024 15:04

Отключил его, чтобы можно было легко проверить комплект, может ли это вызвать проблему?

neeko 14.08.2024 15:33

Да, это также отключает минимайзер. Вы можете настроить TerserPlugin для минимизатора, если хотите, чтобы имена переменных оставались неизменными.

Oluwafemi Sule 14.08.2024 15:35

Давайте продолжим обсуждение в чате.

neeko 14.08.2024 15:53

Другие вопросы по теме