raylinx/nuxt.config.js
2025-04-15 20:10:22 +08:00

120 lines
3.3 KiB
JavaScript

const path = require('path');
const CompressionPlugin = require('compression-webpack-plugin');
const SitemapWebpackPlugin = require('sitemap-webpack-plugin').default;
const sass = require('sass'); // 引入 Dart Sass
module.exports = {
// 全局页面头部设置
target: 'static', // 使项目成为静态站点
head: {
title: 'raylinx',
htmlAttrs: {
lang: 'en'
},
script: [
// 如果需要内嵌其他脚本,请根据需求开启下面代码
{
innerHTML: `(function(d,w,c){if(w[c])return;var s=d.createElement("script");w[c]=function(){(w[c].z=w[c].z||[]).push(arguments);};s.async=true;s.src="https://static.ahc.ink/hecong.js";if(d.head)d.head.appendChild(s);})(document,window,"_AIHECONG");_AIHECONG("ini",{channelId:"9BgJ9p"});`,
type: 'text/javascript',
body: true
}
],
__dangerouslyDisableSanitizers: ['script'], // 允许渲染原始 HTML
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
{ hid: 'description', name: 'description', content: 'My awesome description' },
{ name: 'format-detection', content: 'telephone=no' }
],
link: [
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.png' }
]
},
// 全局 CSS
css: [
'element-ui/lib/theme-chalk/index.css',
'vant/lib/index.css' // 确保 Vant 的样式也被加载
],
// 插件(注意:含有 fs 操作的插件只在服务器端加载)
plugins: [
'@/plugins/element-ui',
'@/plugins/vant',
'@/plugins/global-mixin.js'
// '@/plugins/gtm.client.js'
],
// 自动导入组件
components: true,
// 开发和构建模块
buildModules: [],
// 模块
modules: [
'@nuxtjs/axios',
'@nuxtjs/gtm',
'@nuxt/content'
],
gtm: {
id: 'GTM-T4DJXJTT',
layer: 'dataLayer',
pageTracking: true, // 自动发送页面事件
enabled: true,
// enabled: process.env.NODE_ENV === 'production'
},
axios: {
baseURL: '/'
},
// 构建配置
build: {
transpile: [/^element-ui/, /^vant/], // 确保 Nuxt 知道需要转译 Vant 和 Element-UI
loaders: {
scss: {
implementation: sass, // 使用 Dart Sass
sassOptions: {
// 添加 legacy API 静默处理选项
silenceDeprecations: ['legacy-js-api']
}
}
},
// 扩展 Webpack 配置
extend(config, ctx) {
// 生产环境中引入 CompressionWebpackPlugin
if (!ctx.isDev) {
config.plugins.push(
new CompressionPlugin({
algorithm: 'gzip',
test: /\.(js|css|html|svg|gif|png|jpeg|txt)$/,
threshold: 2048,
filename: '[path][base].gz',
deleteOriginalAssets: false
})
);
}
// 引入 SitemapWebpackPlugin 并正确设置
const routes = ['/', '/aboutUs', '/contactUs'];
config.plugins.push(
new SitemapWebpackPlugin({
base: 'https://www.example.com',
paths: routes.map(route => ({
path: route,
lastmod: new Date().toISOString(),
priority: 0.8,
changefreq: 'monthly'
}))
})
);
// 设置别名
config.resolve.alias['@'] = path.resolve(__dirname);
}
}
};