我们刚才学习了,模块就是一些功能的封装,所以一些成熟的、经常使用的功能,都有人封装成为了模块。并且放到了社区中,供人免费下载。
这个伟大的社区,叫做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. Android 中模仿 Twitter 实现 Toolbar Indicator

    项目地址:https://github.com/nekocode/ToolbarIndicator

  2. HDU 2643

    (第二类斯特林数*N的阶乘 )的和. #include <iostream> #include <cstdio> #include <algorithm> #def ...

  3. xcode5.1生成framework,支持arm64报错

    错误例如以下: ld: Assertion failed: (_machoSection != 0), function machoSection, file /SourceCache/ld64/ld ...

  4. caffe环境配置

    参考:http://blog.csdn.net/enjoyyl/article/details/47397505 http://blog.csdn.net/baobei0112/article/det ...

  5. 在Visual Studio Code中使用C#以及.net core

    Working with C# Using .NET Core in Visual Studio Code Note: VS Code does not support debugging appli ...

  6. zzulioj--1609--求和(数学规律)

     1609: 求和 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 209  Solved: 67 SubmitStatusWeb Board De ...

  7. WPF学习(二) - 绑定

    绑定,这个看起来很神奇的东西,于我这种喜欢刨根儿的人而言,理解起来非常困难.    WPF绑定的核心思想是:数据层属性值的改变,能反应给展示层,反之亦然,并且这个响应的过程能被分离出来. 传统Winf ...

  8. WPF学习(一) - XAML

    Window.Grid.TextBox.Button等,都叫元素 xaml文档中,<>用来定义标签,标签可以用来描述元素或元素的属性,如: <Window> <Windo ...

  9. 《鸟哥的Linux私房菜》笔记——01. 计算机概论

    计算机的五大部分:输入单元.输出单元.CPU(控制单元(Control Unit).算数逻辑单元(ALU)).内存. CPU 的架构 精简指令集(Reduced Instruction Set Com ...

  10. ZOJ 3321 Circle【并查集】

    解题思路:给定n个点,m条边,判断是否构成一个环 注意到构成一个环,所有点的度数为2,即一个点只有两条边与之相连,再有就是判断合并之后这n个点是否在同一个连通块 Circle Time Limit: ...