nodeJS---模块与npm包管理工具
nodeJS---模块与npm包管理工具
一:从模块外部访问另一个模块内的成员;
假如我现在还在D盘中的node文件夹内中的app.js代码改成如下:
var msg = 'hello';
var funName = function(){
return 1;
}
exports.msg = msg;
exports.funName = funName;
使用exports对象将模块中的成员对外可以访问,之后我在同目录下新建app2.js,来调用app.js内的成员msg和funName函数,如下代码:
var foo = require('./app');
console.log(foo.msg);
console.log(foo.funName());
运行如下所示:

即可看出可以在模块A内调用模块B的成员,只需要使用exports对象即可。
那么现在假如模块是一个类的话(在javascript叫构造函数),比如现在app.js代码改成如下的:
function App(name,age){
this.name = name;
this.age = age;
}
App.prototype = {
setName: function(name){
this.name = name;
},
getName: function(){
return this.name;
}
}
exports.App = App;
还是使用exports.App导出类的话,就会报错,我们现在在app2.js调用如下:
var foo = require('./app');
var myFoo = new foo("longen",'28');
console.log(myFoo.getName());
就会报错,如下所示:

但是呢 如果我们在app.js内使用module.exports导出的话。就ok了,exports是module的一个属性。app.js代码改成如下:
function App(name,age){
this.name = name;
this.age = age;
}
App.prototype = {
setName: function(name){
this.name = name;
},
getName: function(){
return this.name;
}
}
module.exports = App;
接着运行app2.js代码如下所示:

可以执行了;
二:组织与管理模块
如何加载一个模块的基本知识点,这里先略,如果想要更详细的了解的话,可以看看朴灵写的深入浅出的nodejs,那边书的理论很详细;
1. 模块对象的属性
在模块文件内部,可以访问当前模块的如下所示的一些属性;
module.id: 属性值为当前模块的ID。在默认情况下,主模块的ID属性值为”.” 其他模块的ID属性值为该模块文件的绝对路径,在模块文件中可以修改当前模块的ID属性值。
如下app.js代码改成如下:
console.log(module.id);
module.id = "longen2";
console.log(module.id);
在app2.js中调用var foo = require('./app'); 然后执行如下:

可以看到module.id改为longen2;
Module.filename: 属性值为当前模块文件的文件名;现在我们把foo.js改成如下:console.log(module.filename);
app2.js不变,直接调用,运行如下:

module.loaded: 属性值为布尔值,当属性值为false时表示模块尚未加载完毕,属性值为true时表示模块加载完毕。下面是app.js改成如下:
console.log(module.loaded);
继续执行如下所示:

module.parent: 属性值为当前模块的父模块对象,即调用当前模块的模块对象,现在foo.js改为如下:
function App(name,age){
this.name = name;
this.age = age;
}
App.prototype = {
setName: function(name){
this.name = name;
},
getName: function(){
return this.name;
}
}
module.exports = App;
console.log(module.parent);
继续调用app2.js,打印如下:

module.children: 属性值为一个数组,其中存放了当前模块的所有子模块对象,即当前模块中已加载的所有模块对象。如上图所示
三:包与npm包管理工具。
在nodejs中,可以通过包来对一组具有相互依赖关系的模块进行统一管理。一个包其实就是一个目录,其中包含了用于对包进行描述的JSON格式的package.json文件,在一个包中,通常包含如下所示的内容:
1) 在包的根目录存放package.json文件。
2) 在bin子目录中存放二进制文件。
3) 在lib子目录中存放javascript文件。
4) 在doc子目录存放对包和包的使用方法进行说明的文档。
5) 在test子目录中存放一些对包进行单元测试的测试用例。
在一个package.json文件中,一个package.json文件中通常应该包含如下字段,下面分别对这些字段进行说明如下:
1) name, 包名。包名是唯一的,由小写字母,数字和下划线组成,不能包含空格。
2) preferglobal, 是否支持全局安装。字段值为true是支持全局安装,为false时不支持全局安装。
3) description, 包说明。对包进行简要概述.
4) vrsion, 版本号。
5) author 作者信息数组。每个数组元素中可包含name(作者姓名)字段,email(作者e-mail),web(作者网址)字段。
6) maintainers, 包维护者信息数组。每个数组元素中可包含name(包维护者的姓名)字段,email(包维护者Email)字段,web(包维护者的网址)字段。
7) bugs, bug的提交地址,可以是网址或电子邮件。
8) licenses. 许可证数组。每个元素要包含type(许可证名称)和url(链接到许可证文本的地址)字段。
9) repository, 仓库托管地址数组。每个元素要包含type(仓库类型,如Git),url(仓库地址)和path(相对于仓库的路径,可选)字段。
10)keywords, 关键字数组,通常用于搜索。
11)dependencies, 本包所依赖的包。是一个关联的数组,有包名和版本号组成。
下面我们来看看如何在项目的根目录下创建一个package.json,当然我们可以手动创建package.json,我们也可以进入我们的项目的根目录后,使用命令窗口来创建,如下我现在还是使用我们node文件夹作为包目录。下面我们先进入node包内,然后执行 命令 npm init;

之后在我node目录下生成一个package.json,内容如下:
{
"name": "bag",
"version": "0.0.1",
"description": "\"A simple demo\"",
"main": "app.js",
"scripts": {
"test": "\"a demo\""
},
"repository": {
"type": "git",
"url": "https:github.com/tugenhua0707"
},
"keywords": [
"[\"longen\"]"
],
"author": "longen",
"license": "BAT"
}
当然还有一些依赖包,我们需要的时候可以手动加进去。
现在我们先来看看如何发布包了;
一:我们在F盘目录下新建一个包名为publicbag,包名尽量不要取名和node或者javascript有关的名字,然后把app.js和package.json复制到该文件夹内,package中的包名改成 publicbag了;现在我们先进入包publicbag内 执行命令安装express依赖包,需要生成node_module目录;如下:
npm install express

就在publicbag包内生存文件node_module文件了,如下:

我们也可以全局安装,如下:
npm install express –g

可以看到如上的路径,安装到npm的路径下了。
一:下面我们可以来看看如何使用npm打包发布nodejs程序包了;
- 首先在npmjs.org注册一个账号,如下:
2. 通过npm adduser来注册新账号或登录老账号:
如下所示:

3. 通过命令 npm publish . 发布包了,如下所示:

我们可以登录npm查看已经发布的包,如下:

可以看到publicbag是我们刚刚发布的包~。
二:如何下载我们刚刚发布的包?
下面我们还是进入F盘后,新建文件夹loadBag文件,然后进入命令行窗口后,进入loadBag文件内,使用命令 npm install publicbag 即可把publicbag包下载到loadBag文件内,如下所示:

然后在loadBag文件内生存包publicbag,如下所示:

当然我们也可以全局下载安装;npm install publicbag –g 如下:

就自动下载到我们npm安装包路径下了;
npm 包管理工具;
在node.js中,提供了一个npm包管理工具,该管理工具可用第三方网站上下载node.js包。我们可以在命令行中,通过不同的命令输入以执行npm包管理工具中的各种功能。
- 可以通过如下所示的命令来卸载命令行提示窗口当前目录下安装的某个包:
npm uninstall <包名>
2. 可以通过如下所示的命令来卸载Node.js的全局包的安装路径下的安装的某个包。
npm uninstall -g <包名>
3. 可以通过如下所示的命令来更新命令行提示窗口当前目录下安装的某个包。
npm update <包名>
4. 可以通过如下所示的命令来更新Node.js的全局包的安装路径下安装的某个包。
npm update –g <包名>
5. 可以通过如下所示的命令来更新命令行提示窗口当前目录下安装的所有包。
npm update
6. 可以通过如下所示的命令来更新Node.js的全局包的安装路径下安装所有包。
npm update -g
nodeJS---模块与npm包管理工具的更多相关文章
- Node.js权威指南 (4) - 模块与npm包管理工具
4.1 核心模块与文件模块 / 574.2 从模块外部访问模块内的成员 / 58 4.2.1 使用exports对象 / 58 4.2.2 将模块定义为类 / 58 4.2.3 为模块类定义类变量或类 ...
- NodeJS 中npm包管理工具
NPM 使用介绍 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从 ...
- Nodejs-内置核心模块&npm包管理工具
1.核心模块的意义 如果只是在服务器运行JavaScript代码,其实意义不大(浏览器就可以解决)因为无法实现功能(读写文件,访问网络) Node的用处在于本身还提供了一系列的功能模块,用于与操作系统 ...
- NPM 包管理工具详解,使用教程
NPM 包管理工具 1.1 定义:什么是 NPM NPM 全称 Node Package Manager,它是 JavaScript 的包管理工具, 并且是 Node.js 平台的默认包管理工具.通过 ...
- node.js中npm包管理工具
现在安装node.js,默认就会帮我们装上了npm包管理工具,npm主要用来下载,安装,管理第三方模块. 创建一个包描述文件: npm init [-y] 查看包的信息 npm info <pa ...
- Node.js之包与npm包管理工具
Node.js之包与npm包管理工具 1.Node.js中的包 1.1在一个包中包含如下内容: package.json:对包进行描述 在bin子目录中存放二进制文件 在lib子目录中存放JavaSc ...
- npm包管理工具在一般项目中的应用方法
最近自己在有时间,在通学一些知识点,记录一下,以便以后使用方面 当我们在做项目的时候,如果需要到包管理工具,那么我们一定会经历以下流程: 1.首先在官网下载node.js,然后默认安装到C盘 检查是否 ...
- node.js开发 npm包管理工具
npm介绍 说明:npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安装.卸载.管理依赖等) 使用npm安装插件:命令提示符执行npm instal ...
- npm 包管理工具
能注册后看简单的功能 订单加信息 下单之前的判断要配合海潮的迁移数据 运行自定义的脚本 在 package.json 的 scripts 里添加自定义的结点 ( 比如 CSOR-serve ) &qu ...
随机推荐
- Java虚拟机 - 类初始化
[深入Java虚拟机]之三:类初始化 类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Java程序代码.虚拟机规范严格规定了有且只有四种情况必须立即对类进行初始化: 遇到new. ...
- 《Inside Solid State Device》读书笔记
这周我看了<Inside Solid State Device>一书,了解了解SSD作为软件的补充. 固态硬盘区别于将数据以磁形式存储的机械硬盘,使用了一种名为NAND的闪存颗粒,以电信号 ...
- HDU6195
cable cable cable Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- [USACO18FEB]Slingshot
题意可化为: 在二维平面中有n个点,坐标为\((x_i,y_i)\),点权为\(t_i\). 现有m个询问,每次给定点\((x,y)\),求\(\min\{|x-x_i|+|y-y_i|+t_i,|y ...
- js-ES6学习笔记-Class(6)
1.类相当于实例的原型,所有在类中定义的方法,都会被实例继承.如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”. 2.父类的静态方法,可 ...
- idea 提交 Push rejected: Push to origin/master was rejected
idea中,发布项目到码云上,当时按照这样的流程添加Git,然后push,提示:push to origin/master war rejected". 解决方案如下: 1.切换到自己项目所 ...
- element-ui table
额,最近有点频繁记录.感觉遇到了很多的问题.然后不断的查,不断的尝试修改.然后得到解决.还是记录关于element-ui的使用.这次是关于表格的使用. 表格使用其实平时用的话也就那么几个属性.虽然官网 ...
- linux根目录下的文件夹及文件
bin->放置执行文件的目录,但毕竟特殊,其下放置的是在单用户维护模式下还能被操作的命令.主要有cat.chmod.date. mv.mkdir.cp.bash等常用命令.dev->存放设 ...
- QQ运动步数&自定义ProgressBar
效果如下 gif图展示效果不好,实际体验无卡顿 1.自定义属性 早Values目录下New-values resource file,命名为attrs.xml(命名随意,但规范命名为attrs.xml ...
- Vue入门系列(五)Vue实例详解与生命周期
Vue官网: https://cn.vuejs.org/v2/guide/forms.html#基础用法 [入门系列] (一) http://www.cnblogs.com/gdsblog/p/78 ...