编写与客户端javascript和服务器端NodeJs模块一起工作的javascript代码

Write javascript code that works with client side javascript and server side NodeJs modules

本文关键字:javascript 一起 模块 工作 代码 NodeJs 服务器端 客户端      更新时间:2023-09-26

Browserify和lo-dash,做一些特别的事情。好的,但应该是免费的,从其他供应商库或nodejs模块。我想编写可重用的代码。所以,…

我可以写一些javascript代码。此外,我可以写NodeJs代码。Ok:我可以为NodeJs编写一个模块,用于服务器端代码,但在某些时候,我需要编写一个NodeJs代码来导出,例如,一个模块。
var MyModule = function () {
    this.attribute = 666
}
module.exports = MyModule

,但……它是一个NodeJs模块。如果我尝试将它包含在客户端页面…

<script src="lib/myModule.js">

我会得到'Uncaught ReferenceError: module is not defined'。为什么?也许吧,因为它是NodeJs代码,而不是Javascript。好吧,但是……这是与NodeJs在客户端和服务器端共享相同代码的最佳实践。我可以共享一个javascript文件,并在两边使用它。我怎么能写一个模块,与javascript代码工作,我想在客户端也使用?

我要找的是:

写一些javascript代码。 my_public_file . js:
console.log('I am a javascript snippet')

然后,我想写一个模块,与相同的代码工作。 my_module . 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">

最佳实践?我疯了?

要使其在客户端和服务器端都工作,只需在module.exports存在时导出它:

var MyModule = function () {
    this.attribute = 666;
};
if (typeof module !== "undefined" && module.exports) {
    module.exports = MyModule;
}

这个和类似的方法被许多库用来使包能够在CommonJS和浏览器上使用(例如:jQuery)

你安装了browserify

$ npm install -g browserify

你把你的my_public_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;
    }));

factory函数正在被调用,我们可以将其赋值给相关的里面的环境。在nodeJs中,export.modules = factory();。在requireJs,define([], factory);。在浏览器中,root.myModule = factory();,因为root === window,我们可以使用myModule作为全局变量