Node.js 在后端和前端之间共享代码

时间:2021-03-31 17:24:10

标签: javascript node.js node-modules

我想在 node.js 后端和前端之间共享一些代码,比如将某种日期格式(Date 本身不支持)转换为 Date 对象。

首先,如果在后端和前端之间共享代码是一种糟糕的做法,请告诉我。

如果不是:我遇到的问题是对于 node.js,我会使用一个模块,并使用 module.exports 来导出 util 函数。我想避免使用 front-end modules 来获得更多浏览器支持。那么如何在后端和前端使用相同的 js 文件呢?

1 个答案:

答案 0 :(得分:0)

.js 和前端使用 node 文件的一种简单方法是在分配给它们之前检查 modulemodule.export 对象。

示例 convert-date.js 文件:

function convertDate( date) {
   // blah blah
}

if(this && typeof module == "object" && module.exports && this === module.exports) {
   module.exports = convertDate;  // for example
}

这导致在前端将 convertDate 声明为全局函数名,同时允许在节点中使用

const convertDate = require( pathOfConvertDate.js);

为了限制创建的全局变量的数量,将更复杂的代码放在 IIFE 中,返回要导出的值:

const convertDate = (()=>{ ..... return convertDate;})();
if( this etc...) module.exports = convertDate;

上述的一个变体是要求前端存在一个公共实用程序对象,该对象必须在文件包含之前声明。使用Util作为示例名称,导出代码变得更像

if(this && typeof module == "object" && module.exports && this === module.exports) {
   module.exports = convertDate;  // for example
}
else if(typeof Util == "object" && Util) {
   Util.convertDate = convertDate;
}
else {
    throw( Error("Front-end 'Util' export object not found'));
}

FWIW 我不知道这种用法有多普遍。我知道它适用于 file:// 协议,并简化了在后端或前端同样运行良好的测试代码的编写。