我们刚才学习了,模块就是一些功能的封装,所以一些成熟的、经常使用的功能,都有人封装成为了模块。并且放到了社区中,供人免费下载。
这个伟大的社区,叫做npm。 也是一个工具名字 node package management
https://www.npmjs.com/ 去社区搜索需求,然后点进去,看api。
如果要配置一个模块,那么直接在cmd使用
1npm install 模块名字
就可以安装。 模块名字全球唯一。安装的文件在一个node_modules文件夹中,
安装的时候,要注意,命令提示符的所在位置。

08.js

var sd = require("silly-datetime");

//需要使用一个日期时间,格式为 20150920110632
var ttt = sd.format(new Date(), 'YYYYMMDDHHmm');

package.json

/* 跟08.js 在一个目录。

我们可以用package.json来管理依赖。
在cmd中,08.js文件所在文件夹,使用npm init可以初始化一个package.json文件,用回答问题的方式生成一个新的package.json文件。
使用 08.js文件所在文件夹 : npm install
将能根据package.json安装08.js所有的依赖。
npm也有文档,这是package.json的介绍:
https://docs.npmjs.com/files/package.json
*/
{
"name": "day2",
"version": "1.0.0",
"description": "ziji zuo de xia waner de",
"main": "08.js",
"directories": {
"test": "test"
},
"dependencies": {
"silly-datetime": "^0.1.0" /*^表示固定只使用0.x.x的版本,不使用1.x.x,2.x.x*/
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"good",
"greet"
],
"author": "kaola",
"license": "ISC"
}
require()别的js文件的时候,将执行那个js文件。
注意:
require()中的路径,是从当前这个js文件出发,根据相对路径,找到别人。而fs是从命令提示符找到别人。
所以,桌面上有一个a.js, test文件夹中有b.js、c.js、1.txt
a要引用b:
var b = require(“./test/b.js”);
b要引用c:
var b = require(“./c.js”);
但是,fs等其他的模块用到路径的时候,都是相对于cmd命令光标所在位置。
所以,在b.js中想读1.txt文件,推荐用绝对路径:
fs.readFile(__dirname + "/1.txt",function(err,data){
console.log(__dirname);//当前文件的绝对路径,E:\360data\重要数据\桌面\test,跨平台兼容,linux也可以兼容
if(err) { throw err; }
console.log(data.toString());
});

silly-datetime源码

(function(root, factory) {
'use strict';
/* istanbul ignore else */
if (typeof exports === 'object') {
// CommonJS
module.exports = factory();
} else if (typeof define === 'function' && define.amd) {
// AMD
define(function() {
return factory();
});
} else if (typeof define === 'function' && define.cmd) {
// CMD
define(function(require, exports, module) {
module.exports = factory();
});
} else {
// Global Variables
root.ResizeImage = factory();
}
})(this, function () {
'use strict'; var out = {}; /**
* 将输入的任意对象转换成 Date,如果装换失败将返回当前时间
* @param {any} datetime 需要被格式化的时间
* @return {Date} 转换好的 Date
*/
function getDateObject(datetime) {
var t = datetime instanceof Date ? datetime : new Date(datetime);
if (!t.getDate()) {
t = new Date();
}
return t;
} /**
* 格式化时间
* @param {Date} datetime 需要被格式化的时间
* @param {string} format 格式化字符串,默认为 'YYYY-MM-DD HH:mm:ss'
* @return {string} 格式化后的时间字符串
*/
out.format = function (datetime, format) {
var t = getDateObject(datetime);
var hours, o, i = 0;
format = format || 'YYYY-MM-DD HH:mm:ss';
hours = t.getHours();
o = [
['M+', t.getMonth() + 1],
['D+', t.getDate()],
// H 24小时制
['H+', hours],
// h 12小时制
['h+', hours > 12 ? hours - 12 : hours],
['m+', t.getMinutes()],
['s+', t.getSeconds()],
];
// 替换 Y
if (/(Y+)/.test(format)) {
format = format.replace(RegExp.$1, (t.getFullYear() + '').substr(4 - RegExp.$1.length));
}
// 替换 M, D, H, h, m, s
for (; i < o.length; i++) {
if (new RegExp('(' + o[i][0] + ')').test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? o[i][1] : ('00' + o[i][1]).substr(('' + o[i][1]).length));
}
}
// 替换 a/A 为 am, pm
return format.replace(/a/ig, hours > 11 ? 'pm' : 'am');
}; /**
* CONST and VAR for .fromNow
*/
// 预设语言:英语
var LOCALE_EN = {
future: 'in %s',
past: '%s ago',
s: 'a few seconds',
mm: '%s minutes',
hh: '%s hours',
dd: '%s days',
MM: '%s months',
yy: '%s years'
};
// 预设语言:简体中文
var LOCALE_ZH_CN = {
future: '%s内',
past: '%s前',
s: '几秒',
mm: '%s分钟',
hh: '%s小时',
dd: '%s天',
MM: '%s月',
yy: '%s年'
};
// 当前本地化语言对象
var _curentLocale = {}; /**
* 修改本地化语言
* @param {string|Object} string: 预设语言 `zh-cn` 或 `en`;Object: 自定义 locate 对象
* @return {Object} this
*/
out.locate = function (arg) {
var newLocale, prop;
if (typeof arg === 'string') {
newLocale = arg === 'zh-cn' ? LOCALE_ZH_CN : LOCALE_EN;
} else {
newLocale = arg;
}
for (prop in newLocale) {
if (newLocale.hasOwnProperty(prop) && typeof newLocale[prop] === 'string') {
_curentLocale[prop] = newLocale[prop];
}
}
return out;
};
// 初始化本地化语言为 en
out.locate(''); /**
* CONST for .fromNow
*/
// 各计算区间
var DET_STD = [
[ 'yy', 31536e6 ], // 1000 * 60 * 60 * 24 * 365 一年月按 365 天算
[ 'MM', 2592e6 ], // 1000 * 60 * 60 * 24 * 30 一个月按 30 天算
[ 'dd', 864e5 ], // 1000 * 60 * 60 * 24
[ 'hh', 36e5 ], // 1000 * 60 * 60
[ 'mm', 6e4 ], // 1000 * 60
[ 's', 0 ], // 只要大于等于 0 都是秒
]; /**
* 计算给出时间和当前时间的时间距离
* @param {Date} datetime 需要计算的时间
* @return {string} 时间距离
*/
out.fromNow = function (datetime) {
var det = +new Date() - (+getDateObject(datetime));
var format, str, i = 0, detDef, detDefVal;
if (det < 0) {
format = _curentLocale.future;
det = -det;
} else {
format = _curentLocale.past;
}
for (; i < DET_STD.length; i++) {
detDef = DET_STD[i];
detDefVal = detDef[1];
if (det >= detDefVal) {
str = _curentLocale[detDef[0]].replace('%s', parseInt(det/detDefVal, 0) || 1);
break;
}
}
return format.replace('%s', str);
}; return out;
});

node06---npm、silly-datetime、路径问题的更多相关文章

  1. 【hexo+github搭建myblog】bash: npm: command not found 问题,疑似解决!关键词:NPM全局安装路径

    情况:打算用hexo+github搭建个人博客 1. hexo搭建,参考博文如下,非常感谢: Hexo+Github博客搭建完全教程 hexo从零开始到搭建完整 问题: 在最基本的安装步骤 (参考链接 ...

  2. 修改Nodejs内置的npm默认配置路径方法

    Nodejs 内置的npm默认会把模块安装在c盘的用户AppData目录下(吐槽一下:不明白为啥现在的软件都喜欢把资源装在这里) C盘这么小,肯定是不行的,下面一步步修改到D盘 1.打开cmd命令行, ...

  3. npm设置prefix 路径

    Windows下的Nodejs npm路径是appdata,很不爽,想改回来,但是在cmd下执行以下命令也无效 npm config set cache "D:\nodejs\node_ca ...

  4. windows系统下npm 全局安装路径问题

    安装了nodejs之后,npm的路径默认一直都是appData,表示很讨厌,于是尝试修改在安装目录(D盘空间很大啊) 安装目录:D:\program files\nodejs 一.在nodejs下新建 ...

  5. 修改npm默认安装路径

    npm config ls npm config set prefix D:\ag\npm

  6. npm 全局安装路径 在哪里

    注意:在Admin下,需要把隐藏文件显示出来,才能找到对应的文件路径.

  7. npm install路径

    我们在webpack项目中使用npm install命令安装很多模块 但是很多时候都不知道这些模块安装在哪里,想要删除的时候找不到,所有想要明确的知道npm的安装路径 首先,npm install 安 ...

  8. Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G

    code&monkey   Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...

  9. 【原】npm 常用命令详解

    今年上半年在学习gulp的使用,对npm的掌握是必不可少的,经常到npm官网查询文档让我感到不爽,还不如整理了一些常用的命令到自己博客上,于是根据自己的理解简单翻译过来,终于有点输出,想学习npm这块 ...

  10. npm 入门

    要使用 npm 需要安装 node.js,因为 node.js 中会附带 npm 查看 node 的安装路径 which node 查看 npm 的安装路径 which npm npm 分为两种安装模 ...

随机推荐

  1. MyBatis学习总结(1)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  2. 学渣乱搞系列之dp斜率优化

    学渣乱搞系列之dp斜率优化 By 狂徒归来 貌似dp的斜率优化一直很难搞啊,尤其是像我这种数学很挫的学渣,压根不懂什么凸包,什么上凸下凸的,哎...说多了都是泪,跟wdd讨论了下,得出一些结论.本文很 ...

  3. HDU 3625

    有点置换群的味道. 当撞开一个门后,能打开一连串的门,即是可以排成一个圈.求的是种数,于是,可以使用第一类斯特林数,求出撞了0~K次的种数. 但是,注意,当第一个门为独自一个圈时,是不可行的,因为这代 ...

  4. 随心所欲生成git仓库随意一段commit的专用patch应用小实践

     随心所欲生成git仓库随意一段commit的专用patch应用小实践 我们在开发中.时不时的可能要去做一个patch给你的下线,或者你的合作者.在git管理中,我们知道有git format-pat ...

  5. Android程序之全国天气预报查询(聚合数据开发)

    一.项目演示效果例如以下: 项目源码下载地址: http://pan.baidu.com/s/1pL6o5Mb password:5myq 二.使用 聚合数据SDK: (1)聚合数据官网地址:http ...

  6. Android View 事件分发机制 源代码解析 (上)

    一直想写事件分发机制的文章,无论咋样,也得自己研究下事件分发的源代码.写出心得~ 首先我们先写个简单的样例来測试View的事件转发的流程~ 1.案例 为了更好的研究View的事件转发,我们自定以一个M ...

  7. 汇编 -- Hook API (MessageBoxW)

    说到HOOK.我看了非常多的资料和教程.无奈就是学不会HOOK.不懂是我的理解能力差.还是你们说的 不够明确,直到我看了下面这篇文章,最终学会了HOOK: http://blog.sina.com.c ...

  8. js mudules.js

    var InsertRow={ isMoveRow:false, // 是否存在动态移动行 curSelRowIndex:"", // 当前选中行序号 prevSelRowInde ...

  9. Linux常用命令之rpm安装命令

    转自:http://www.cnblogs.com/datasyman/p/6942557.html 在 Linux 操作系统下,几乎所有的软件均通过RPM 进行安装.卸载及管理等操作.RPM 的全称 ...

  10. (转载)BeanUtils.copyProperties() 用法

    BeanUtils.copyProperties() 用法 标签: hibernateuserjdbc数据库strutsjava 2009-10-17 23:04 35498人阅读 评论(6) 收藏  ...