我如何在我的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?

本文关键字:我的 一个 单独 js 函数 文件 node js- 后端 前端      更新时间:2023-09-26

在我的Web应用程序中,我在一些js文件中有一些数学函数。为了能够在我的node .js-后端中需要它,我必须使用module.exports在上述文件中导出上述函数。

    //Needed for Usage in the Back-end
    module.exports = {
        calculate: calculate
    };

当我现在想在前端使用这个文件时,它仍然包含上面的代码片段,这不是致命的,但有点不方便。

有没有更好的方法来使用一个js文件在前面和后面没有重复的代码?

问候,Claas m .

检查module.exports是否存在

if (typeof module !== 'undefined' && module.exports) {
  module.exports = {
    calculate: calculate
  };
} else {
  window.calculate = calculate;
}

你总是可以检查你是否在Node.js中,如果不是,只是使用不同的函数

if(typeof process !== 'undefined' && process.argv[0] === "node") {
    // this is node
}

您可以使用external,它将取代浏览器端节点的require

在这种情况下,我的首选是Browserify。

通过一些代码修改,你也可以尝试RequireJS.

在脚本文件末尾使用:

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,但只有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 =

预览

支持所有从IE9开始的现代浏览器:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set

相关文章: