Files
markdown/blog/1.技术栈/985.Nuxt UI Pro.md
2025-08-08 10:01:03 +08:00

3.2 KiB
Raw Permalink Blame History

title, description, date, img, navigation
title description date img navigation
Nuxt UI Pro Nuxt 被收购后预计在9月发布 Nuxt UI Pro v4,并且全免费 2025-07-25 https://lijue-me.oss-cn-chengdu.aliyuncs.com/20250723114628628.png
icon
simple-icons:nuxtdotjs

Nuxt 被收购后预计在9月发布 Nuxt UI Pro v4,并且全免费。 于是把最近在做的项目 UI 组件换成了 Nuxt UI Pro。 不过9月才免费现在就忍不住上了组件总不至于去缴几百美元的费用吧。 image.png

于是先绕过一些验证过程,体验一下“学习版”。

做一个 shell 脚本在项目根目录下执行即可完成跳过。pnpm i 安装完或者更新完依赖就执行一次即可。

# 绕过 UI Pro 的 License 验证
set -euo pipefail
# 1. 禁用 module.mjs 的调用
MODULE="node_modules/@nuxt/ui-pro/dist/module.mjs"
if [[ -f $MODULE ]]; then
sed -i.bak '/await validateLicense({.*rootDir })/s/^/\/\//; /^await validateLicense({.*rootDir })/s/^/\/\//' "$MODULE"
rm -f "$MODULE.bak"
echo "✅ module.mjs 已屏蔽"
fi
# 2. 直接“替换函数” fake 200
SHARED="node_modules/@nuxt/ui-pro/dist/shared"
JS=$(find "$SHARED" -maxdepth 1 -name 'ui-pro.*.mjs' | head -n1)
[[ -z $JS || ! -f $JS ]] && { echo "⚠️ ui-pro.*.mjs 未找到"; exit 0; }
cat <<'EOF' > tmp_func.mjs
async function validateLicense(opts) {
/* --- patched --- */
return { status: 200 }
}
EOF
sed -i.bak '/^async function validateLicense[^(]*(/,/^\}$/c\
async function validateLicense(opts) {\
/* --- patched --- */\
return { status: 200 }\
}\
' "$JS"
rm -f "$JS.bak" tmp_func.mjs
echo "✅ $JS 已 mock 完成"
echo "🎉 License ⛔ Done!"

以上脚本是自动化完成以下操作:

修改 node_modules\@nuxt\ui-pro\dist\module.mjs


nuxt.hook("build:before", async () => {
// 注释掉这行
// await validateLicense({ key, theme: theme$1, dir: nuxt.options.rootDir });

});

修改 node_modules/@nuxt/ui-pro/dist/shared/ui-pro.CsgJ05mi.mjs 此目录下 ui-pro.xxx.mjs 名称是随机生成

async function validateLicense(opts) {

//注释下方代码
// if (!opts.key) {

// throw _createError(`Missing \`${opts.theme.env}\` license key.

// Purchase Nuxt UI Pro at \`${opts.theme.link}\` to build your app in production.`);

// }

// const gitInfo = opts.key !== "oss" ? void 0 : await _getLocalGitInfo(opts.dir) || _getGitEnv();

// const projectName = gitInfo ? `${gitInfo.owner || ""}/${gitInfo.name || ""}` : await _getPkgName(opts.dir);

// try {

// await ofetch("https://api.nuxtlabs.com/ui-pro/verify", {

// headers: {

// "Authorization": `key ${opts.key}`,

// "x-nuxt-project": projectName

// },

// params: gitInfo ? {

// gitRepo: gitInfo.name,

// gitOrg: gitInfo.owner,

// gitUrl: gitInfo.url

// } : {}

// });

// } catch (error) {

// const statusType = Math.round(error.status / 100);

// if (statusType === 4) {

// throw _createError(`Invalid \`${opts.theme.env}\` license key.

// Purchase Nuxt UI Pro at \`${opts.theme.link}\` to build your app in production.`);

// }

// throw _createError("Cannot validate Nuxt UI Pro License: " + error);

// }

/手动添加返回 200 状态值
const response = {

status: 200,

};

return response;

}