繁体   English   中英

如何在node.js-Backend和前端中的单独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文件而不重复代码?

此致Claas 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不会是全局变量。

您可以使用external来代替Node在浏览器端的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一起导出的函数module.exports window 这样,您无需通过添加冗余内容来修改所有共享代码,而只需将一小段代码仅添加到客户端一次。

Plunker

http://plnkr.co/edit/2fWlNN5w7R4Mcdv9VJ5T?p=preview

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM