将变量从服务器端 JS 文件导出到客户端 JS 文件

Exporting a variable from server side JS file to client side JS file

我正在尝试将一个简单的对象变量从服务器端 JS 文件导出到客户端 JS 文件。在服务器端文件中,我正在做一些网络抓取,最终产生一个简单的对象变量。在客户端文件中,我希望能够访问该变量。

我发现我确实能够导出一个变量,但是,如果服务器端文件中存在任何 commonJS 语法(如果我错了请纠正我),那么它将无法工作。客户端文件将尝试读取整个服务器端文件,包括 commonJS 语法 - 它不能。

以下代码演示了我的代码和问题:

服务器端文件:

const module = require('random_module');

let myVar = {
  firstName: "John",
  lastName: "Doe"
}
    
export { myVar };

客户端文件:

import { myVar } from 'server-side.js';

console.log(myVar);

在上面的示例中,require 语句禁止 import/export 工作。如果我删除那条线,它就可以工作。但是,我不能简单地删除 require 语句,因为我的代码需要这些语句。我当然可以将我的网络抓取工具输出到一个 JSON 文件,然后从中读取,但这看起来很冗长。

其他人已经解决了节点和浏览器之间共享代码的问题,比如这个this post,但是,我只需要导出一个简单的对象变量——而不是整个模块。

为什么客户端文件尝试读取整个服务器端文件,尽管我明确的导出语句针对一个简单的对象变量?我怎样才能避免这个问题?

谢谢。

替换这个-

let myVar = {
  firstName: "John",
  lastName: "Doe"
}

有了这个-

export let myVar = {
  firstName: "John",
  lastName: "Doe"
}

然后就可以了。如果您觉得有用,请勾选答案旁边的箭头。

Why does the client side file attempt to read the entire server side file despite my explicit export statement targeting a simple object variable?

必须执行模块中的代码才能得到结果。

它无法知道不需要第 1 行,但需要第 3-8 行。

如果你导入一个模块,你就导入一个模块。对模块导出的整个对象进行解构操作。


如果你正在输出 data 而不是 code 那么不要使用模块。让浏览器请求 JSON 和 Ajax。您不需要更改网络抓取工具,因此它会以不同的方式输出数据。您可以在您的服务器中编写一个 Web 服务端点,以导入您已有的模块并使其中的数据可用。