编写与客户端javascript和服务器端NodeJs模块配合使用的javascript代码

编写与客户端javascript和服务器端NodeJs模块配合使用的javascript代码,javascript,node.js,express,Javascript,Node.js,Express,Browserify和lo dash,做些特别的事情。好的,但是我们希望不受其他供应商库或nodejs模块的影响。我想写可重用代码。所以 我可以写一些javascript代码。此外,我还可以编写NodeJs代码。好的:我可以为NodeJs编写一个模块,用于服务器端代码,但是在某些时候我需要编写一个NodeJs代码来导出,例如,一个模块 var MyModule = function () { this.attribute = 666 } module.exports = MyModule

Browserify和lo dash,做些特别的事情。好的,但是我们希望不受其他供应商库或nodejs模块的影响。我想写可重用代码。所以

我可以写一些javascript代码。此外,我还可以编写NodeJs代码。好的:我可以为NodeJs编写一个模块,用于服务器端代码,但是在某些时候我需要编写一个NodeJs代码来导出,例如,一个模块

var MyModule = function () {
    this.attribute = 666
}
module.exports = MyModule
但是。。。这是一个NodeJs模块。如果我尝试将其包含在客户端页面中

<script src="lib/myModule.js">
然后,我想编写一个使用相同代码的模块my_模块.js

var lib_public_code = require('some/public/path/my_public_file.js')
var MyModule = function () {
    this.attribute = 666
}
module.exports = MyModule
此外,我还想编写一个公共网页(index.html),它使用相同的代码

<script src="javascript/my_public_file.js">


最佳实践?我疯了?

要使它同时在客户端和服务器端工作,只需在
模块存在时将其导出即可。导出
存在:

var MyModule = function () {
    this.attribute = 666;
};

if (typeof module !== "undefined" && module.exports) {
    module.exports = MyModule;
}
许多库都使用这种方法和类似的方法来支持在CommonJS和浏览器上使用包(例如:)

您安装的browserify

$ npm install -g browserify
您可以使用您的my\u public\u file.js任何节点代码等

var lib_public_code = require('some_file.js')
var MyModule = function () {
   this.attribute = 666
}
module.exports = MyModule
你在玩魔术

$ browserify my_public_file.js -o bundled_public.js
然后它在浏览器中工作,所需的文件都在那里

<script src="bundled_public.js">


在客户端和node.js上都使用require.js。已经完成了几个在客户端和服务器端之间共享代码的应用程序。

来编写一个可重用的javascript模块。我将使用下面的代码,它将与浏览器、nodejs和requirejs一起工作

    (function(root, factory) {
      if (typeof module !== 'undefined' && typeof exports === 'object') {
        module.exports = factory();
      } else if (typeof define === 'function' && define.amd) {
        define([], factory);
      } else {
        root.myModule = factory();
      }
    }(this, function() {
      var myModule = {};
      myModule.publicMethod = function() {};
      return myModule;
    }));
正在调用
工厂
函数,我们可以将其分配给相关的 内部环境。在nodeJs中,
export.modules=factory()。在《还魂曲》中,

定义([],工厂)。在浏览器中,
root.myModule=factory()
,因为
root===window
,我们可以使用
myModule
作为全局变量。

这就是您需要的。我的问题在服务器端,而不是客户端。好的,但是。。。问题是:如何编写可重用的javascript代码,这样我就不需要浏览化或删除?我认为浏览化、webpack和其他,捆绑您的代码并连接所需的文件的意义在于,它只处理所有会让管理跨平台代码变得痛苦的事情。Browserify还将您可能已经在npm上使用的许多模块转换为与浏览器兼容的代码,通常是以“ify”结尾的“模块”。另一点是在服务器端和客户端之间共享配置文件。您不能只执行
var MyModule=module.exports=function MyModule(options){}
no,因为在浏览器上会出现
ReferenceError
。这只在服务器端起作用,而这不是目标。
    (function(root, factory) {
      if (typeof module !== 'undefined' && typeof exports === 'object') {
        module.exports = factory();
      } else if (typeof define === 'function' && define.amd) {
        define([], factory);
      } else {
        root.myModule = factory();
      }
    }(this, function() {
      var myModule = {};
      myModule.publicMethod = function() {};
      return myModule;
    }));