Browserify 和 lo-dash,做一些特别的事情。好的,但应该不受其他供应商库或 nodejs 模块的影响。我想编写可重用的代码。所以, ...
我可以写一些javascript代码。另外,我可以编写 NodeJs 代码。好的:我可以为 NodeJs 编写一个模块,用于服务器端代码,但在某些时候我需要编写一个 NodeJs 代码来导出,例如,一个模块。
var MyModule = function () {
this.attribute = 666
}
module.exports = MyModule
但是,...它是一个 NodeJs 模块。如果我尝试将其包含在客户端页面中...
<script src="lib/myModule.js">
我会得到“未捕获的引用错误:模块未定义”。为什么?也许,因为它是 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
而且,我还想写一个使用相同代码的公共(public)网页( 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 )