vibeblame

Как отключить source maps в продакшене

Source maps открывают ваш исходный код всем желающим. Как отключить их в Next.js, Vite, CRA, Astro, Vue (Nuxt), Angular и WordPress.

Что такое source maps и почему они опасны

Source maps — это .map-файлы, которые отображают минифицированный JavaScript обратно в исходный код. Они нужны для отладки, но заодно открывают ваш оригинальный код всем желающим прямо в DevTools.

Если source maps доступны публично, атакующий может читать бизнес-логику, быстрее находить захардкоженные секреты и понимать архитектуру приложения.

Как проверить: DevTools -> вкладка Sources. Если видите оригинальные .tsx / .ts / .js файлы вместо минифицированного кода — source maps торчат наружу.


Next.js

productionBrowserSourceMaps по умолчанию false, но иногда его включают явно.

// next.config.js
const nextConfig = {
  productionBrowserSourceMaps: false,
}
module.exports = nextConfig

Проверьте после деплоя:

curl -I https://yoursite.com/_next/static/chunks/main.js.map
# Должно вернуть 404

Vite

// vite.config.js
export default defineConfig({
  build: {
    sourcemap: false, // по умолчанию false, но лучше прописать явно
  },
})

Create React App (CRA)

Добавьте в .env.production:

GENERATE_SOURCEMAP=false

Или передайте при сборке:

GENERATE_SOURCEMAP=false npm run build

Astro

В production-сборках Astro source maps отключены по умолчанию. Если вы добавляли плагин, который их включает:

// astro.config.mjs
export default defineConfig({
  vite: {
    build: {
      sourcemap: false,
    },
  },
})

Vue (Nuxt)

Nuxt 3 использует Vite под капотом — source maps в продакшене отключены по умолчанию. Чтобы прописать явно:

// nuxt.config.ts
export default defineNuxtConfig({
  vite: {
    build: {
      sourcemap: false,
    },
  },
})

Для Nuxt 2 (на webpack):

// nuxt.config.js
export default {
  build: {
    extend(config, { isDev }) {
      if (!isDev) {
        config.devtool = false
      }
    },
  },
}

Проверьте:

npm run build
ls .output/public/_nuxt/*.map
# Ничего не должно быть

Angular

В angular.json найдите конфигурацию production и выставьте sourceMap: false:

{
  "projects": {
    "your-app": {
      "architect": {
        "build": {
          "configurations": {
            "production": {
              "sourceMap": false
            }
          }
        }
      }
    }
  }
}

Или передайте флаг через CLI:

ng build --configuration production --no-source-map

Проверьте:

ls dist/your-app/browser/*.map
# Ничего не должно быть

WordPress

WordPress source maps не генерирует. Риск появляется только если тема или плагин использует webpack, Vite или другой бандлер — проверьте его конфиг и примените правила выше.

Если используете готовую тему со скомпилированными ассетами, проверьте, не оставил ли разработчик .map-файлы в комплекте. Заблокировать доступ к ним можно через .htaccess:

# .htaccess
<FilesMatch "\.map$">
  Require all denied
</FilesMatch>

Или через Nginx:

location ~* \.map$ {
  deny all;
  return 404;
}

Tilda

Tilda не выставляет source maps — платформа компилирует и раздаёт свой JS, доступа к .map-файлам нет. Эта проблема к сайтам на Tilda не относится.


webpack

// webpack.config.js
module.exports = {
  devtool: false,
}

Проверка после деплоя

DevTools -> Sources — должны быть только минифицированные файлы. Попробуйте запросить .map-файл напрямую — должен вернуть 404.

Либо запустите vibeblame снова — проблема должна исчезнуть.

Как отключить source maps в продакшене | vibeblame