javascript - Svelte 给我 'Uncaught ReferenceError: require is not defined'

标签 javascript svelte nlg

我正在尝试在我的 Svelte 应用程序中使用名为 RosaeNLG 的自然语言生成库,但每当我从“需要”rosaenlg 的 JavaScript 文件导入任何变量时,我都会收到一条错误消息“ Uncaught ReferenceError :未定义要求”。

Rosae 是一个用于 Node.js 或客户端(浏览器)执行的库,基于 Pug 模板引擎。

我读过 Svelte 的类似问题,这些问题已通过将“requires”语法更改为不同形式的“import”来解决。例如:'从“rosaenlg”导入rosaenlgPug'; '从“rosaenlg”导入*作为rosaenlgPug'; var rosaenlgPug = import("rosaenlg")'; '导入(“rosaenlg”)'。

所有这些变体都无法汇总并最终给出错误:“ fatal error :堆限制附近无效的标记压缩分配失败 - JavaScript 堆内存不足”。

编辑:我已经设法使用以下代码在一个精简文件中运行旧版本的 Rosae:

<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/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="cbb9a4b8aaaea5a7ac8bfae5f9fbe5f9" rel="noreferrer noopener nofollow">[email protected]</a>/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 };

但是当将“结果”变量导入到精简文件中时,我得到:“ Uncaught ReferenceError :未定义 require$$0$6”。

任何关于如何在 Svelte 中渲染这样的库的建议将不胜感激。非常感谢。

最佳答案

我不熟悉 rosaenlg,但下面是一个最小的 SvelteKit 项目,可以在 svelte.config.js 中指定 CommonJS 库后运行> 按照 FAQ 的指示

文件夹结构

├── sveltekit-project/        // Root
|   ├── src/
|   |   ├── routes/
|   |   |   ├── index.svelte
|   |   |   └── tuto.js
|   |   ├── app.html
|   |   ...
|   ├── svelte.config.js
|   ...

/src/routes/tuto.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 }};
};

/src/routes/index.svelte

<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>

/svelte.config.js

/** @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;

关于javascript - Svelte 给我 'Uncaught ReferenceError: require is not defined',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68600599/

相关文章:

javascript - jquery遍历和使用选择器

javascript - AngularJS - 使用命名空间解析 JSON feed

javascript - 为什么双向绑定(bind)组件在 Svelte 中更新两次?

javascript - svelte 如何处理导入内部的 react 性

java - SimpleNLG 模型中的 TextSpec 不可用

java - NLG - 使用 simplenlg 创建文本描述

javascript - 从同位素容器中移除元素

javascript - jQuery 第一次返回 XML 节点很好,但第二次调用它时,它是空的

javascript - 用 Vite 将 JS 和 CSS 打包成一个文件

python - ModuleNotFoundError : No module named 'tensorflow.contrib' with tensorflow=2. 0.0