我正在尝试将名为 RosaeNLG 的自然语言生成库与我的 Svelte 应用程序一起使用,但是每当我从“需要”rosaenlg 的 JavaScript 文件中导入任何变量时,我都会收到一条错误消息,指出“未捕获的 ReferenceError:需要未定义”。
Rosae 是一个用于 node.js 或客户端(浏览器)执行的库,基于 Pug 模板引擎。
我读过 Svelte 的类似问题,这些问题已通过将“需要”语法更改为不同形式的“导入”来解决。例如:'从“rosaenlg”导入 rosaenlgPug'; '从 "rosaenlg" 导入 * 作为 rosaenlgPug'; var rosaenlgPug = import("rosaenlg")'; 'import("rosaenlg")'。
所有这些变体都无法汇总并最终给出错误:“致命错误:接近堆限制的无效标记压缩分配失败 - JavaScript 堆内存不足”。
编辑:我已经使用以下代码设法让旧版本的 Rosae 在 svelte 文件中工作:
<script>
let rendered = "Busy...";
const onRosaeNlgLoad = () => {
let array = ['x','y','z'];
let template = `
mixin variable
| this is a Rosae template #[+syn('synonym1', 'synonym2')]`
rendered = rosaenlg_en_US.render(template, {
language: 'en_US',
fruits: fruits
})
}
</script>
<svelte:head>
<script src="https://unpkg.com/rosaenlg@1.20.2/dist/rollup/rosaenlg_tiny_en_US_1.20.2_comp.js" on:load="{onRosaeNlgLoad}"></script>
</svelte:head>
<h1>{rendered}!</h1>
但是,我仍然无法按照 Rosae examples 中的说明在 JS 文件中或通过从 pug 文件链接模板来使其工作。
我正在 JS 文件中尝试以下操作:
import * as rosaenlgPug from "rosaenlg";
let array = ['x', 'y', 'z']
let result = rosaenlgPug.renderFile('tuto.pug', {
language: 'en_US',
element: array[0]
});
export { result };
但是当将 'result' 变量导入一个 svelte 文件时,我得到:'Uncaught ReferenceError: require$$0$6 is not defined'。
任何有关如何在 Svelte 中呈现这样的库的建议将不胜感激。非常感谢。
答案 0 :(得分:2)
我不熟悉 rosaenlg
,但下面是一个最小的 SvelteKit
项目,它可以按照 FAQ 的指示在 svelte.config.js
中指定 CommonJS 库后运行
├── sveltekit-project/ // Root
| ├── src/
| | ├── routes/
| | | ├── index.svelte
| | | └── tuto.js
| | ├── app.html
| | ...
| ├── svelte.config.js
| ...
import rosaenlgPug from 'rosaenlg';
const phones = [{
name: 'OnePlus 5T',
colors: ['Black', 'Red', 'White'],
}, {
name: 'OnePlus 5',
colors: ['Gold', 'Gray'],
}, {
name: 'OnePlus 3T',
colors: ['Black', 'Gold', 'Gray'],
}];
const template = `
mixin colors
| the phone's available colors are
eachz color in phone.colors with { separator:',', last_separator:'and', end:'.' }
| #{color}
- let phone;
each phoneElt in phones
- phone = phoneElt;
p #{phone.name} . #[+colors]
`;
// As an endpoint
export async function get() {
const res = rosaenlgPug.render(template, {
language: 'en_US',
phones: phones
});
return { body: { res }};
};
<script context='module'>
// Fetch in load for client side usage
export const load = async ({ fetch }) => {
const data = await fetch('/tuto').then(r => r.json())
const { res } = data
return { props: { res }}
}
</script>
<script>
export let res
</script>
<p>{@html res}</p>
/** @type {import('@sveltejs/kit').Config} */
const config = {
kit: {
// hydrate the <div id="svelte"> element in src/app.html
target: '#svelte',
vite: {
optimizeDeps: {
include: ['rosaenlg']
}
}
}
};
export default config;
答案 1 :(得分:0)
这不是答案,只是一些尝试。
有几种可能性 - 该消息并不是很有帮助。我在其他软件包中遇到了这个问题,这是我为解决它所做的:
首先,是否有未安装的必需包?在 ReferenceError: require is not defined
之后,完整的错误消息说了什么?我已经看到 http2-proxy
或 @snowpack/plugin-webpack
等发生这种情况。例如
npm install --save-dev @snowpack/plugin-webpack
此外,如果使用雪堆,您可能会有一个 snowpack.config.mjs
文件。尝试将其重命名为仅 snowpack.config.js
(就我而言,这立即修复了它,第二步)
要尝试的另一件事:在您的配置文件中,尝试将 require
交换为 import
,反之亦然。例如
const pkg = require('http2-proxy');
到
const pkg = import('http2-proxy');