编写与客户端javascript和服务器端NodeJs模块配合使用的javascript代码
Browserify和lo dash,做些特别的事情。好的,但是我们希望不受其他供应商库或nodejs模块的影响。我想写可重用代码。所以 我可以写一些javascript代码。此外,我还可以编写NodeJs代码。好的:我可以为NodeJs编写一个模块,用于服务器端代码,但是在某些时候我需要编写一个NodeJs代码来导出,例如,一个模块编写与客户端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
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;
}));