如何在我的 node.js-后端和前端中使用单独的 js 文件中的函数?
How can I use a function in a separate js file in my node.js-Backend as well as in my frontend?
在我的 Web 应用程序中,我在某些 js 文件中有一些数学函数。为了能够在我的 Node.js-后端中需要它,我必须使用 module.exports.
在所述文件中导出所述函数
//Needed for Usage in the Back-end
module.exports = {
calculate: calculate
};
当我现在想在前端使用这个文件时,它仍然包含上面的代码片段,这不是致命的,但有些不方便。
有没有什么更好的方法可以在前面和后面使用一个js文件而不重复代码?
此致,
克拉斯 M.
您始终可以检查自己是否在 Node.js 中,如果不在,则只需以不同的方式使用该功能
if(typeof process !== 'undefined' && process.argv[0] === "node") {
// this is node
}
像这样检查 module.exports
是否存在
if (typeof module !== 'undefined' && module.exports) {
module.exports = {
calculate: calculate
};
} else {
window.calculate = calculate;
}
在脚本文件末尾使用:
var Ducky = {
quak: function quak() {
return "Quack!";
}
};
if (exports !== undefined && exports !== null) {
exports.Ducky = Ducky;
} else if (module !== undefined && module !== null &&
module.exports !== undefined && module.exports !== null) {
module.exports.Ducky = Ducky;
} else if (window !== undefined && window !== null) {
window.Ducky = Ducky;
}
编辑:
您可能希望将这些内容打包到 (function(){})()
表达式中,这样 Ducky 就不会成为全局变量。
您可以使用外部来替代浏览器端的节点 require
。
在这种情况下,我的偏好是 Browserify。
通过一些代码修改,您也可以尝试 RequireJS。
如果您的服务器端模块中没有任何 require
,只有 module.exports
,那么您可以保持服务器端代码不变,并在您的加载任何此类模块之前的客户端页面:
客户端JavaScript
window.module = {
set exports (obj) {
for(p in obj) {
obj.hasOwnProperty(p) && (window[p] = obj[p]);
}
}
};
此代码段会将在您的服务器端代码中定义并使用 module.exports
导出的任何导出函数放入 window
。这样你就不需要通过添加冗余的东西来修改你所有的共享代码,而只需添加一次一小段代码给你的客户端。
笨蛋
http://plnkr.co/edit/2fWlNN5w7R4Mcdv9VJ5T?p=preview
从 IE9 开始的所有现代浏览器都支持:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set
在我的 Web 应用程序中,我在某些 js 文件中有一些数学函数。为了能够在我的 Node.js-后端中需要它,我必须使用 module.exports.
在所述文件中导出所述函数 //Needed for Usage in the Back-end
module.exports = {
calculate: calculate
};
当我现在想在前端使用这个文件时,它仍然包含上面的代码片段,这不是致命的,但有些不方便。
有没有什么更好的方法可以在前面和后面使用一个js文件而不重复代码?
此致, 克拉斯 M.
您始终可以检查自己是否在 Node.js 中,如果不在,则只需以不同的方式使用该功能
if(typeof process !== 'undefined' && process.argv[0] === "node") {
// this is node
}
像这样检查 module.exports
是否存在
if (typeof module !== 'undefined' && module.exports) {
module.exports = {
calculate: calculate
};
} else {
window.calculate = calculate;
}
在脚本文件末尾使用:
var Ducky = {
quak: function quak() {
return "Quack!";
}
};
if (exports !== undefined && exports !== null) {
exports.Ducky = Ducky;
} else if (module !== undefined && module !== null &&
module.exports !== undefined && module.exports !== null) {
module.exports.Ducky = Ducky;
} else if (window !== undefined && window !== null) {
window.Ducky = Ducky;
}
编辑:
您可能希望将这些内容打包到 (function(){})()
表达式中,这样 Ducky 就不会成为全局变量。
您可以使用外部来替代浏览器端的节点 require
。
在这种情况下,我的偏好是 Browserify。
通过一些代码修改,您也可以尝试 RequireJS。
如果您的服务器端模块中没有任何 require
,只有 module.exports
,那么您可以保持服务器端代码不变,并在您的加载任何此类模块之前的客户端页面:
客户端JavaScript
window.module = {
set exports (obj) {
for(p in obj) {
obj.hasOwnProperty(p) && (window[p] = obj[p]);
}
}
};
此代码段会将在您的服务器端代码中定义并使用 module.exports
导出的任何导出函数放入 window
。这样你就不需要通过添加冗余的东西来修改你所有的共享代码,而只需添加一次一小段代码给你的客户端。
笨蛋
http://plnkr.co/edit/2fWlNN5w7R4Mcdv9VJ5T?p=preview
从 IE9 开始的所有现代浏览器都支持:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set