我们刚才学习了,模块就是一些功能的封装,所以一些成熟的、经常使用的功能,都有人封装成为了模块。并且放到了社区中,供人免费下载。
这个伟大的社区,叫做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. Java基础学习总结(33)——Java8 十大新特性详解

    Java8 十大新特性详解 本教程将Java8的新特新逐一列出,并将使用简单的代码示例来指导你如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API ...

  2. Mysql如何避免全表扫描的方法

    在以下几种条件下,MySQL就会做全表扫描: 1>数据表是在太小了,做一次全表扫描比做索引键的查找来得快多了.当表的记录总数小于10且记录长度比较短时通常这么做. 2>没有合适用于 ON ...

  3. nginx 查看每秒有多少访问量

    nginx访问量统计 1.根据访问IP统计UV awk '{print $1}' access.log|sort | uniq -c |wc -l 2.统计访问URL统计PV awk '{print ...

  4. angular-API

    AngularJS 全局 API 用于执行常见任务的 JavaScript 函数集合,如: 比较对象 迭代对象 转换对象 API 描述 angular.lowercase() 转换字符串为小写 ang ...

  5. Springmvc Get请求Tomcat、WebLogic中文乱码问题

    Springmvc Get请求Tomcat.WebLogic中文乱码问题 学习了:http://www.cnblogs.com/qingdaofu/p/5633225.html http://www. ...

  6. 保留全部Android crash信息

    保留全部Android crash信息 framework/base/core/java/com/android/internal/os/RuntimeInit.java 又一次以下这个函数,增加自己 ...

  7. swift -函数、函数指针

    // // main.swift // FunctionTest-04 // import Foundation println("函数測试!") testFunction() / ...

  8. [Android] Android开发优化之——对界面UI的优化(2)

    在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开的.界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局.通常,在这个页面中会用到很多 ...

  9. 去除iframe滚动条1

    主页面的IFRAME中添加:scrolling="yes" 子页面程序代码: 让竖条消失: <body style='overflow:scroll;overflow-x:a ...

  10. sts安装出现could not find jar:file解决办法,could not find jar:file,sts安装

    标题sts插件下载好但是安装出错 我的eclipse是4.5.2,在官方网站https://spring.io/tools3/sts/legacy下载,压缩包的名字为:spring-tool-suit ...