如何使用单个声明修改服务器端和客户端都使用的库
How can I modify a library that is used both server- and clientside using a single declaration?
我在客户端和服务器端都使用Moment.js来格式化日期。
我想修改Moment.js格式的某些方面,我希望这些修改使用一个声明同时应用于服务器端和客户端。
在app.js中,我在需要外部.js文件(它修改了moment对象)之前需要moment,但Node.js一直抱怨在我的外部.js中访问moment时没有定义它。
我解决这个问题的方式感觉像是一个邪恶的黑客:
app.js
global.moment = require('moment');
var scripts = require(__dirname + '/public/scripts.js');
index.html
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.3/moment.min.js">
<script src="/scripts.js">
scripts.js
var moment = (function() {
try {
return global.moment;
} catch(e) {}
try {
return window.moment;
} catch(e) {}
})();
moment.modifySomeProp(prop, {});
您可以创建一个新的模块来返回修改后的moment.js。您仍然需要在html中包含moment.js,但您不需要在节点中包含,所以您可以在app.js
中使用require(__dirname + '/public/modifiedmoment.js')
我从这里稍微修改了代码以创建模块。它会将window.moment替换为修改后的,并在节点的require中返回修改后的时刻。
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['moment'], factory);
} else if (typeof exports === 'object') {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require('moment'));
} else {
// Browser globals (root is window)
root.moment = factory(root.moment);
}
}(this, function(moment) {
moment.modifySomeProp(prop, {});
return moment;
}));
相关文章:
- 客户端服务器REST API captcha实现
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 如何使用Socket.io将命令从客户端发送到服务器
- 如何轻松地将服务器端变量从Java代码转移到客户端代码
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 如何将我的javascript库公开给其他客户端使用
- 是否可以使用JavaScript/AAJAX在客户端创建一个文件
- 如何使用Javascript客户端对象模型检索Sharepoint 2010列表项权限
- 返回/从Twit's客户端.get
- 将客户端特定的日期格式返回到服务器MVC4
- MobileFirst:在客户端运行计时器作业-最佳选项
- 单个 Redis 客户端连接是否支持并发读写
- socket.io-发送到socketid(单个客户端)不工作
- 从流星服务器到客户端获取单个值
- 如何使用单个声明修改服务器端和客户端都使用的库
- 是否有可能在MVC中禁用单个模型属性的客户端验证?
- 如何在socket io中向单个客户端发送错误数据包?
- SignalR长轮询多个组.为单个客户端添加Exception
- 使用node.js assocket .io向单个特定客户端发送/发出消息