我想在 node.js 后端和前端之间共享一些代码,比如将某种日期格式(Date 本身不支持)转换为 Date 对象。
首先,如果在后端和前端之间共享代码是一种糟糕的做法,请告诉我。
如果不是:我遇到的问题是对于 node.js,我会使用一个模块,并使用 module.exports 来导出 util 函数。我想避免使用 front-end modules 来获得更多浏览器支持。那么如何在后端和前端使用相同的 js 文件呢?
答案 0 :(得分:0)
在 .js
和前端使用 node
文件的一种简单方法是在分配给它们之前检查 module
和 module.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://
协议,并简化了在后端或前端同样运行良好的测试代码的编写。