前端作为公共文件和后端作为模块之间的 JS 文件共享

JS file share between front end as common file and backend as module

提问人:Fifi 提问时间:4/18/2023 最后编辑:Fifi 更新时间:4/18/2023 访问量:278

问:

JS 文件名包含一个数据数组,例如:list.js

let users = [{firstname: 'Paul', lastname:'smith'}];

此文件在客户端加载,并包含以下行:

<script src="/js/list.js"></script>

因此,相同的文件也必须加载到服务器端的模块中(在 node.js 中)。

require('../public/js/list.js');

由于这是在模块中,因此我不能使用 .我必须使用导入:require

import { users } from '../public/js/list.js';

另一方面,如果我导出变量,我将无法再在客户端加载文件:

export var users = [{firstname: 'Paul', lastname:'smith'}];

有没有在客户端和服务器端加载文件的技巧?


编辑:如果我在文件中使用以下内容list.js

module.exports = [{firstname: 'Paul', lastname:'smith'}];

我必须在我的 node.js 模块中使用 require:

const { users } = require('../public/js/list.js');

它不起作用:

module.exports = [{firstname: 'Paul', lastname:'smith'}];

使用第二个选项时,不能放入测试中:export

if (true) export default testList;

我遇到了以下错误:

if (true) export default users;
          ^^^^^^

SyntaxError: Unexpected token 'export'
JavaScript 节点 .js 模块 服务器端 客户端

评论

0赞 jabaa 4/18/2023
您可以检查环境是否支持 ,或者 然后才使用它。requiremoduleexport
0赞 Fifi 4/18/2023
@jabaa 因此,我不确定如何做到这一点?几行代码应该可以帮助我开始
2赞 T.J. Crowder 4/18/2023
您可以切换到 ESM,然后在 Node.js 中同时使用浏览器端和 ESM。这是 JavaScript 现在拥有标准模块系统的优势之一。
1赞 T.J. Crowder 4/18/2023
@Fifi - 如果您使用的是 .参见:developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules(或我书中的第13章)。require
1赞 T.J. Crowder 4/18/2023
@Fifi - 这就是我的观点。您已经表明您正在使用 (和 )。那不是ESM。requiremodule.exports

答:

0赞 Abderrahmene Merzoug 4/18/2023 #1

我耍了个小把戏。

您可以使用 nodejs 检测来做到这一点。 请参阅以下内容。

let users = [{firstname: 'Paul', lastname:'smith'}]; // Your variable

if (typeof process === 'object') { // Detect when this is nodejs
    // Expose the users variable
    module.exports.users = users;
}

这应该在兄弟方面起作用。 在 nodejs 端:

const { users } = require('../public/js/list.js');

希望能有所帮助。 问候。

评论

0赞 Fifi 4/18/2023
请求的模块 '../public/js/list.js' 不提供名为 'users' 的导出
0赞 Fifi 4/18/2023
哼哼,当我使用 if works 时,但一旦我把它放在测试中,我就得到了export default users;SyntaxError: Unexpected token 'export'
1赞 rsp 4/18/2023
@Fifi 你不能把 因为 是静态分析的(不运行代码)。exportifexport
0赞 Fifi 4/18/2023
所以,我本来想做的是不可能的?
1赞 Abderrahmene Merzoug 4/18/2023
所以你试过导入语句吗?