# Hugo 中使用 NPM 和 JSX 本文尝试在 Hugo 中使用 NPM JSX 和 MDX ## Hugo NPM 包管理 hugo v0.124.1 为止,只有一个 pack 命令。用于生成 package.json 和 package.hugo.json https://gohugo.io/commands/hugo_mod_npm_pack/ ``` Various npm (Node package manager) helpers. Usage: hugo mod npm [command] [flags] hugo mod npm [command] Available Commands: pack Experimental: Prepares and writes a composite package.json file for your project. ``` 博客目录运行 hugo mod npm pack , 会读取并修改 package.json ,并生成 package.hugo.json 。没有 package.json 则生成 package.json 和 package.hugo.json 空模板。 ```json { "comments": { "dependencies": {}, "devDependencies": {} }, "dependencies": {}, "devDependencies": {}, "name": "www.ftls.xyz", "version": "0.1.0" } ``` 然后在 package.hugo.json 添加需要的依赖,并运行 hugo mod npm pack , hugo 会把依赖写入 package.json ,然后 install 一下就行了。如果先 `pnpm add -D preact` ,目前测试看起来需要手动把 devDependencies 复制到 package.hugo.json 中才行,hugo mod npm pack 以 package.hugo.json 为主。 ```json { "devDependencies": { "preact": "^10.20.2" }, "name": "www.ftls.xyz", "version": "0.1.0" } ``` ## 使用 JSX 如果想使用 JSX 功能,需要使用 Hugo v0.124.0 js.Build 新增功能。根据官网示例,新建 assets/js/test.jsx ```jsx // https://gohugo.io/hugo-pipes/js/ // https://github.com/gohugoio/hugoTestProjectJSModImports import { render } from 'preact'; const App = () => <>Hello world!; const container = document.getElementById('app'); if (container) render(, container); ``` 在能使用 Hugo 模板的文件中,例如 layouts/shortcodes/jsx.html 中使用 js.Build 。JSX automatic 代表自动导入, JSXImportSource 决定使用哪个库自动从中导入其 JSX 辅助函数,示例中使用 preact 。然后使用生成的 JS 文件即可。 ```html {{ $js := resources.Get "js/test.jsx" | js.Build (dict "JSX" "automatic" "JSXImportSource" "preact") }}
``` 然后在 markdown 中使用 shortcode 就可在 Hugo 中使用 JSX 。就会加载一个 16.7kb 的 js 文件,显示 Hello world! 。