Astro + Nx + Paraglide – 创建 i 模块

正如我在另一篇文章中所说,我正在学习 astro.build。

我不喜欢与 astro 和 paraglide 集成的一件事是将所有内容保留在 /src 文件夹中。

如果您有一个庞大的代码库,将来管理和保持代码整洁可能会成为问题。好吧,我知道 astro 可以很好地管理最终捆绑包中的大型代码库,但开发人员的体验不太好,无法将所有文件放在一起。

我非常熟悉 monorepos,特别是 nx,我在另一个项目中工作过,小型和非常大的项目,nx 确实有助于通过拆分模块/库来组织代码。

本文的想法是分享如何将 astro 与 nx 集成并创建一个 i18n 模块来将所有消息和滑翔伞事物集中在一个模块中。

创建仓库

首先我们需要创建我们的启动存储库。

为了跳过 astro 和 paraglide 设置,我将从我的上一篇文章存储库开始:https://github.com/alancpazetto/astro-i18n-dynamic

因此,要使用它,只需克隆存储库,运行安装并启动项目:

git clone https://github.com/alancpazetto/astro-i18n-dynamiccd astro-i18n-dynamicnpm installnpm start

如果你想从头开始,你可以关注这些好文章:

创建 astro 应用程序在 astro 中添加滑翔伞

添加 nx

在继续18n模块之前,我们需要设置nx。

这很简单,nx 有 init 命令可以帮助在现有代码中初始化 nx 工作区,所以只需运行这个:

npx nx@latest init

当 nx 命令要求可缓存脚本时,您可以选择构建和设置文件夹到 ./dist (将来可能会更改)

Astro + Nx + Paraglide - 创建 i 模块

随意选择命令显示的任何其他选项,这不会影响本教程。

添加 i18n 模块

如果您已经使用过 nx,那么您对 ​​nx 插件很熟悉,但如果没有,我会向您介绍。

nx 使用插件架构,您可以添加或删除插件来添加或删除工作区中的功能。

这些插件可以添加生成器、执行器或任何其他 nx 功能。

在我们的例子中,我们需要创建一个 js 库模块,所以我们需要plugin js 插件,名为 @nx/js。

您可以在这里找到所有 nx 插件:https://nx.dev/plugin-registry

所以,让我们通过运行以下命令来安装 js 插件:

npm install -d @nx/js

安装后我们可以生成我们的 i18n 模块。

在这里我想提出一个建议,我真的很喜欢使用命令行工具,但是nx有一个很好的vscode扩展,可以使所有生成器可视化(还有其他功能)。所以我强烈建议安装这个。

但是如果你不想使用扩展或者不使用 vscode,没问题,我们可以在终端中运行它:

npx nx generate @nx/js:library --name=i18n --bundler=swc --directory=libs/i18n --importpath=@astro-nx-paraglide/i18n --projectnameandrootformat=as-provided --unittestrunner=none --no-interactive

这将使用 js 插件创建一个模块作为 js 库,位于 libs/i18n 路径内,导入路径为 @astro-nx-paraglide/i18n。

您可以在这里更改您的配置。

如果你想使用 vscode 扩展,打开命令面板,搜索 nxgenerate (ui) 并选择@nx/js:library,在新窗口中添加这些信息:

Astro + Nx + Paraglide - 创建 i 模块

文心大模型 文心大模型

百度飞桨-文心大模型 ERNIE 3.0 文本理解与创作

文心大模型 56 查看详情 文心大模型

会议 i18n 模块

新模块将在 libs/i18n 中创建,基本上它是一个 js 库,以 index.ts 作为入口点和 lib 文件夹,可以添加所有库代码。

Astro + Nx + Paraglide - 创建 i 模块

将 paraglide 设置为 i18n 模块

要在 i18n 模块中配置 paraglide,我们需要更改 paraglide 配置中的一些内容。

首先,打开你的 astro 配置(如 astro.config.mjs)并更改 paraglide 集成 outdir:

import { defineconfig } from 'astro/config';import paraglide from '@inlang/paraglide-astro';export default defineconfig({  // use astro's i18n routing for deciding which language to use  i18n: {    locales: ['en', 'pt-br'],    defaultlocale: 'en',  },  output: 'server',  integrations: [    paraglide({      // recommended settings      project: './project.inlang',      outdir: './libs/i18n/src/paraglide', // <=== here    }),  ],});

它将设置 astro + paraglide 来查看此文件夹内部(在代码中我们将以其他方式导入)。

我们需要设置 package.json 脚本,在构建时更改滑翔伞输出目录(构建和安装后脚本):

{  "scripts": {    "dev": "astro dev",    "start": "astro dev",    "build": "paraglide-js compile --project ./project.inlang --outdir ./libs/i18n/src/paraglide && astro check && astro build",    "preview": "astro preview",    "astro": "astro",    "postinstall": "paraglide-js compile --project ./project.inlang --outdir ./libs/i18n/src/paraglide"  },}

现在我们可以重新运行 postinstall 脚本来重新生成 paraglide 文件夹: npm run postinstall

毕竟我们有这个文件夹结构:

Astro + Nx + Paraglide - 创建 i 模块

现在我们需要导出到所有代码生成的 paragrlide 文件。

paraglide 导出 2 个文件夹:

messages.js:包含所有翻译的消息函数runtime.js:包含所有运行时函数,例如设置哪种语言

所以我们需要编辑库入口点(index.ts)来导出这些文件:

export * as messages from './paraglide/messages';export * as runtime from './paraglide/runtime';

注意:默认情况下,nx 安装项目 “verbatimmodulesyntax”: true 在 tsconfig.json 中会导致 i18n 模块中出现错误,但您可以通过编辑 libs/i18n/tsconfig.json 添加“verbatimmodulesyntax”来配置库 tsconfig.json 以禁用此功能”: false 在编译器选项中。

现在,我们不再需要 libs/i18n/src/lib 文件夹了,删除它即可。

将 astro 应用程序与 i18n 模块集成

现在是时候集成我们所有的代码了。

如果您检查 ./tsconfig.json,nx 添加了一个新的 compileroptions.path,其中 importpath 先前已指定为我们的库入口点。

注意:如果这里出现导入错误,则需要将compileroptions.baseurl设置为./.

因此,为了将我们的代码与模块集成,我们将在代码中使用此导入路径:

import { messages, runtime } from '@astro-nx-paraglide/i18n';

在我们的应用程序文件中,在 src 内,我们需要将所有导入从 ../paraglide/messages (或运行时)更改为新的导入路径。

例如在 src/components/languagepicker.astro 中:

---import * as m from '../paraglide/messages';- import { languagetag } from '../paraglide/runtime';+ import { runtime } from '@astro-nx-paraglide/i18n';- const makeurlforlanguage = (lang: string) => `/${lang}${astro.url.pathname.replace(`/${languagetag()}`, '')}`;+ const makeurlforlanguage = (lang: string) => `/${lang}${astro.url.pathname.replace(`/${runtime.languagetag()}`, '')}`;---

在我们的页面内,如 src/pages/index.astro:

---import layout from '../layouts/layout.astro';- import * as m from '../paraglide/messages';- import { languagetag } from '../paraglide/runtime';+ import { messages as m, runtime } from '@astro-nx-paraglide/i18n';---  

{m.homepageheading()}

-

{m.homepagecontent({ languagetag: languagetag() })}

+

{m.homepagecontent({ languagetag: runtime.languagetag() })}

清理src文件夹

随着模块的设置和所有导入的更改,我们可以删除 src/paraglide 文件夹,因为我们不再使用它了。

示例存储库

这是示例存储库:https://github.com/alancpazetto/astro-nx-paraglide

只需克隆存储库,运行安装并启动项目:

git clone https://github.com/alancpazetto/astro-nx-paraglidecd astro-nx-paraglidenpm installnpm start

感谢阅读,如果您喜欢并发表评论,请不要忘记在本文中给予支持。

以上就是Astro + Nx + Paraglide – 创建 i 模块的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/459052.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月8日 02:41:07
下一篇 2025年11月8日 02:46:18

相关推荐

  • clion 怎么创建 c++ 项目

    在 c++lion 中创建 c++ 项目可以通过以下步骤实现:1. 启动 clion 并点击 “create new project”。2. 选择 “c++ executable” 作为项目类型。3. 设置项目位置,建议使用专门文件夹。4. 选择 c+…

    2025年12月18日
    000
  • Gulc:从头开始建造的C库

    本文开启了一个系列,介绍我正在开发的C99库:Gulc(Generic Utility Library的缩写)。该库主要用于学习和娱乐目的,旨在提供C标准库中安全内存管理和实用功能(如向量和无序映射),以简化C语言编程。未来将持续添加更多功能。 目前,该库包含一个简单的验证系统(类似于断言,但在发行…

    2025年12月18日
    000
  • vs 怎么管理多个 c++ 项目

    在 visual studio 中管理多个 c++++ 项目可以通过创建解决方案和使用 cmake 来实现。1. 创建新解决方案并添加 c++ 项目。2. 使用 cmake 管理项目依赖和配置。通过这些方法,可以高效地组织和维护多个 c++ 项目,提升开发效率。 引言 搞 C++ 开发的朋友们,管理…

    2025年12月18日
    000
  • Meson:使用无中造成的GIT项目作为依赖

    meson项目依赖处理:巧妙解决无meson.build文件的git项目依赖问题 许多优秀的Git项目缺乏Meson.build文件,这给使用Meson构建系统的开发者带来了挑战。本文将介绍一种方法,通过创建补丁文件来解决这个问题,并成功将一个没有Meson.build文件的Git项目作为子项目添加…

    2025年12月18日
    000
  • 网络服务安装

    推介会: 本 SAE(业务学习情况)项目旨在开发一个基于客户端-服务器架构的实时“CAT”网络讨论应用程序。该应用允许多个客户端连接到中央服务器并进行实时通信。下图概述了套接字功能: 资源配置: 编程语言:C 语言版本控制:使用分布式 Github 进行代码共享开发环境:Visual Studio …

    2025年12月18日
    000
  • CSS Grid 布局在 IE 中不兼容的原因及解决方案

    IE 不兼容 CSS Grid 布局的原因是它不支持 CSS Grid 规范。解决方案包括:1. 使用 polyfills 模拟现代浏览器功能;2. 切换到支持 CSS Grid 布局的浏览器;3. 使用替代布局技术(如 Flexbox)。 CSS Grid 布局在 IE 中不兼容的原因 CSS G…

    2025年12月18日
    000
  • 探索文件拆分和合并:管理大文件的革命性工具

    您是否曾在传输或存储大量文件时遇到困难?了解 File Splitter & Merger,这是一个开源项目,旨在以优雅和高效的方式简化这一挑战。 这个项目是做什么的? 文件分割和合并由两个工具组成: 文件分割器 — 将大文件分成更小的块。 文件合并 — 将这些块重新组合成原始文件 为什么有…

    2025年12月18日
    000
  • Day – 配置 NixOS 以在 VSCode 中使用 C 调试器

    我将所有软件包安装在 /etc/nixos/configuration.nix 中的environment.systempackages 中。 因此,除了 gcc 之外,要使用调试器,您还需要: environment.systempackages = with pkgs; […vscode-f…

    2025年12月18日
    000
  • C 调试器在调试器模式打开时无法打印或获取输入

    在 .vscode 文件夹中: 我的lanch.json: “configurations”: [ { “name”: “c/c++: gcc.exe build and debug active file”, “type”: “cppdbg”, “request”: “launch”, “prog…

    2025年12月18日
    000
  • NFetch

    大家好。 我想与你分享我的新项目。最近我了解了 neofetch 项目归档,并决定尝试用 c 语言编写我的模拟。 现在基本功能已经实现,使用flags进行数据输出等 您可以在链接中找到该项目的源代码:https://github.com/nighty3098/nfetch 安装: git clone…

    2025年12月18日
    000
  • 获取下一行学习如何处理文件描述符和系统 I/O 的项目

    在 c 编程领域,有效管理输入、输出和内存是基础。为了帮助您掌握这些关键概念,您将在 get_next_line 项目中编写一个使用文件描述符逐行读取文件的函数。每次调用该函数都会从文件中读取下一行,从而允许您一次一行处理整个文件内容。 了解系统中的文件描述符和 i/o 什么是文件描述符? 文件描述…

    2025年12月18日
    000
  • 使用免费 NET DIO + Randstad 的后端训练营

    免费的 bootcamp coding the future randstad – backend with .net 对于任何想要专注于 c# 编程语言和 microsoft 开发生态系统的人来说都是一个绝佳的机会。 凭借超过 8,000 个奖学金,参与者将有机会学习 .net 基础知识,成为能够…

    2025年12月18日 好文分享
    000
  • 如何为 C++ 函数库函数贡献代码?

    为 c++++ 函数库贡献代码的指南:选择函数库并了解其贡献流程。创建 issue 描述你的问题或功能请求。编写代码更改并创建 pull request。撰写清晰的编码注释。遵循函数库的编码风格。编写测试用例以确保代码正常工作。 如何为 C++ 函数库函数贡献代码 简介 对开源 C++ 函数库进行贡…

    2025年12月18日
    000
  • C++ 函数的库函数的依赖性和版本管理如何处理?

    c++++ 函数的库函数依赖性管理包括静态链接或动态加载,版本管理涉及 abi 版本和源代码版本。通过检查版本号或使用符号链接可以确保兼容性。实战中,需安装库,检查 abi 版本,获取源代码版本,并使用适当的标志编译和链接程序。 C++ 函数的库函数依赖性和版本管理 在 C++ 中,函数通常会依赖于…

    2025年12月18日
    100
  • clion的安装与配置教程

    CLion是一款由JetBrains开发的C/C++ IDE。安装步骤包括:下载并安装CLion、安装CMake、选择工具链。配置步骤包括:导入项目、编译和运行、调试、代码格式化、添加插件。CLion支持多种功能,包括CMake构建、工具链选择、代码格式化、调试和插件扩展。 CLion 安装与配置教…

    2025年12月18日
    000
  • C++ 函数在人工智能中的广泛应用

    c++++ 函数在人工智能中被广泛应用,用于以下任务:分类:将数据分配到类别(如手写数字识别)回归:预测连续值(如预测房屋价格)聚类:将数据点分组到类似组中(如客户细分)特征工程、模型训练、推理和部署 C++ 函数在人工智能中的广泛应用 引言 C++ 是一门强大的编程语言,在人工智能 (AI) 领域…

    2025年12月18日
    000
  • 埃尔凡操作系统

    ErfanOS:全面控制之路 ErfanOS 是 ErfanKeyhani-1 (Me) 的一个定制操作系统项目,旨在摆脱对政府控制和企业运行系统的需求。它是一个完全 DIY 的操作系统,使用自定义程序集引导加载程序启动,在 32 位保护模式 下运行,并具有 基于 C 的内核。您可以在 QEMU 上…

    2025年12月18日
    000
  • clion激活码永久

    Clion没有官方途径永久激活。替代解决方案包括:JetBrains帐户30天试用;教育许可证1年使用;使用开源替代方案(如VSCode、Code::Blocks)。 Clion激活码永久获取方法 如何获取永久激活码? 目前没有官方途径可以永久获取Clion激活码。 替代解决方案 1. 使用 Jet…

    2025年12月18日
    000
  • c语言hello world代码怎么打

    在 C 语言中编写“Hello World”代码的步骤:创建一个包含以下代码的新文件:#include int main() { printf(“Hello Worldn”); return 0;}保存文件并使用 C 编译器编译它。运行已编译的程序,它将输出“Hello Wo…

    2025年12月18日
    000
  • clion和vscode哪个好

    哪款 IDE 更胜一筹?入门门槛:VSCode 门槛较低,适合初学者。语言支持:VSCode 支持多种语言,CLion 专注于 C/C++。调试功能:CLion 调试工具更全面。代码补全:两者均提供优秀补全,CLion 专注于 C/C++。版本控制:两者集成良好。价格:VSCode 免费,CLion…

    2025年12月18日
    000

发表回复

登录后才能评论
关注微信