0

0

Astro + Nx + Paraglide - 创建 i 模块

WBOY

WBOY

发布时间:2024-08-22 16:04:28

|

837人浏览过

|

来源于dev.to

转载

正如我在另一篇文章中所说,我正在学习 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-dynamic
cd astro-i18n-dynamic
npm install
npm 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 模块

会议 i18n 模块

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

KAIZAN.ai
KAIZAN.ai

使用AI来改善客户服体验,提高忠诚度

下载

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-paraglide
cd astro-nx-paraglide
npm install
npm start

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

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

411

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

533

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

309

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

510

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

244

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

256

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5272

2023.08.17

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

8

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
go语言零基础开发内容管理系统
go语言零基础开发内容管理系统

共34课时 | 2.5万人学习

第二十三期_前端开发
第二十三期_前端开发

共98课时 | 7.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号