Node.js之路【第二篇】Nodejs中的pip(NPM)&REPL
什么是NPM
在学Python的时候我们肯定会使用第三方模块或者编写模块供别人使用,我们有一个非常好用的pip来帮我们管理我们的模块包!那么Nodejs重的模块包呢?
对没错就是NPM,他是随同NodeJS一起安装的包管理工具:(和python中的pip类似)
- 允许用户从NPM服务器下载别人编写的第三方包到本地使用
- 允许从用户从NPM服务器下并安装别人编写的命令程序到本地使用
- 语序用户辨析自己的包或命令程序到NPM服务器供别人使用
由于新版本的NodeJS已经集成了npm所以我们安装完NodeJS之后可以通过下面的命令去查看npm版本
LuoTimdeMacBook-Pro-2:~ luotim$ npm -v 2.15.1
如果你安装的是旧版本的npm,可以很容易的通过npm去升级
#LuoTimdeMacBook-Pro-2:~ luotim$ sudo npm install npm -g Password: Sorry, try again. Password: /usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js npm@3.9.2 /usr/local/lib/node_modules/npm LuoTimdeMacBook-Pro-2:~ luotim$ npm -v #3.9.2
使用npm命令安装模块
一、安装命令
npm安装NodeJS模块语法格式如下:
npm install <Module Name>
安装一下NodeJS web框架模块express
sudo npm install express
安装好之后,express包就放在工程目录下面的node_modules目录中了,调用的时候通过require('express')的方式调用。
#在程序中调用
var express = require('express');
二、全局安装与本地安装
本地安装:
npm install express
- 将包放在./node_modules下(运行npm install 的目录下),如果没有node_modules目录,会在当前执行npm命令的目录下生成node_modules目录。
- 可以通过require()来导入本地安装的模块
全局安装:
npm install express -g
- 将安装包放在/usr/local下
- 可以直接通过命令行调用
- 不能通过require()来导入模块
查看软件包:
#查看本地安装的本地模块要进入到/node_modules/目录下 npm ls #查看全局安装的模块 npm ls -g
三、package.json
每个模块下面都会有一个package.json文件,我们看下express保重的文件内容,他里面存放了关于这个模块的相关信息
LuoTimdeMacBook-Pro-2:express luotim$ cat package.json
{
"_args": [
[
{
"name": "express",
"raw": "express",
"rawSpec": "",
"scope": null,
"spec": "latest",
"type": "tag"
},
"/private/tmp"
]
],
"_from": "express@latest",
"_id": "express@4.13.4",
"_inCache": true,
"_installable": true,
"_location": "/express",
"_npmUser": {
"email": "doug@somethingdoug.com",
"name": "dougwilson"
},
"_npmVersion": "1.4.28",
"_phantomChildren": {},
"_requested": {
"name": "express",
"raw": "express",
"rawSpec": "",
"scope": null,
"spec": "latest",
"type": "tag"
},
"_requiredBy": [
"#USER"
],
"_resolved": "https://registry.npmjs.org/express/-/express-4.13.4.tgz",
"_shasum": "3c0b76f3c77590c8345739061ec0bd3ba067ec24",
"_shrinkwrap": null,
"_spec": "express",
"_where": "/private/tmp",
"author": {
"email": "tj@vision-media.ca",
"name": "TJ Holowaychuk"
},
"bugs": {
"url": "https://github.com/expressjs/express/issues"
},
"contributors": [
{
"email": "aaron.heckmann+github@gmail.com",
"name": "Aaron Heckmann"
},
{
"email": "ciaranj@gmail.com",
"name": "Ciaran Jessup"
},
{
"email": "doug@somethingdoug.com",
"name": "Douglas Christopher Wilson"
},
{
"email": "rauchg@gmail.com",
"name": "Guillermo Rauch"
},
{
"email": "me@jongleberry.com",
"name": "Jonathan Ong"
},
{
"email": "shtylman+expressjs@gmail.com",
"name": "Roman Shtylman"
},
{
"email": "hanul@hanul.me",
"name": "Young Jae Sim"
}
],
"dependencies": {
"accepts": "~1.2.12",
"array-flatten": "1.1.1",
"content-disposition": "0.5.1",
"content-type": "~1.0.1",
"cookie": "0.1.5",
"cookie-signature": "1.0.6",
"debug": "~2.2.0",
"depd": "~1.1.0",
"escape-html": "~1.0.3",
"etag": "~1.7.0",
"finalhandler": "0.4.1",
"fresh": "0.3.0",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
"on-finished": "~2.3.0",
"parseurl": "~1.3.1",
"path-to-regexp": "0.1.7",
"proxy-addr": "~1.0.10",
"qs": "4.0.0",
"range-parser": "~1.0.3",
"send": "0.13.1",
"serve-static": "~1.10.2",
"type-is": "~1.6.6",
"utils-merge": "1.0.0",
"vary": "~1.0.1"
},
"description": "Fast, unopinionated, minimalist web framework",
"devDependencies": {
"after": "0.8.1",
"body-parser": "~1.14.2",
"connect-redis": "~2.4.1",
"cookie-parser": "~1.4.1",
"cookie-session": "~1.2.0",
"ejs": "2.3.4",
"express-session": "~1.13.0",
"istanbul": "0.4.2",
"jade": "~1.11.0",
"marked": "0.3.5",
"method-override": "~2.3.5",
"mocha": "2.3.4",
"morgan": "~1.6.1",
"multiparty": "~4.1.2",
"should": "7.1.1",
"supertest": "1.1.0",
"vhost": "~3.0.1"
},
"directories": {},
"dist": {
"shasum": "3c0b76f3c77590c8345739061ec0bd3ba067ec24",
"tarball": "https://registry.npmjs.org/express/-/express-4.13.4.tgz"
},
"engines": {
"node": ">= 0.10.0"
},
"files": [
"LICENSE",
"History.md",
"Readme.md",
"index.js",
"lib/"
],
"gitHead": "193bed2649c55c1fd362e46cd4702c773f3e7434",
"homepage": "https://github.com/expressjs/express",
"keywords": [
"express",
"framework",
"sinatra",
"web",
"rest",
"restful",
"router",
"app",
"api"
],
"license": "MIT",
"maintainers": [
{
"email": "doug@somethingdoug.com",
"name": "dougwilson"
}
],
"name": "express",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/expressjs/express.git"
},
"scripts": {
"test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/",
"test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/",
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
"test-tap": "mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/"
},
"version": "4.13.4"
}
LuoTimdeMacBook-Pro-2:express luotim$
简单解释:
- name - 包名。
- version - 包的版本号。
- description - 包的描述。
- homepage - 包的官网 url 。
- author - 包的作者姓名。
- contributors - 包的其他贡献者姓名。
- dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。
- repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
- main - main 字段是一个模块ID,它是一个指向你程序的主要项目。就是说,如果你包的名字叫 express,然后用户安装它,然后require("express")。
- keywords - 关键字
四、卸载、更新、搜索、创建模块
卸载
npm uninstall express
更新
npm update express
搜索
npm search express
创建模块
NodeJS REPL(交互解释器)
和python的交互解释器类似NodeJS也停工了交互式解释器REPL
一、REPL功能
有下面的功能:
- 读取用户输入,解析输入了JavaScript数据结构并存储在内存中
- 执行输入的数据结构
- 打印结果
- 循环
直接输入node来启动Node的终端
LuoTimdeMacBook-Pro-2:express luotim$ node >
1、表达式运算
LuoTimdeMacBook-Pro-2:express luotim$ node > 1 + 1 2 > 1 * 5 + 6 / 8 5.75 >
2、变量
变量声明需要使用var关键字,如果不使用var关键字变量会被打印出来,并且是使用var关键字的变量可以使用console.log()来输出变量
> x = 10 10 > console.log(x) 10 undefined > var y = 10 undefined > console.log(y) 10 undefined >
3、多行表达式
> var x = 0;
undefined
> do {
... x++;
... console.log('Thes number x now is : ' + x);
... } while (x<6);
Thes number x now is : 1
Thes number x now is : 2
Thes number x now is : 3
Thes number x now is : 4
Thes number x now is : 5
Thes number x now is : 6
undefined
>
4、下划线变量
可以通过使用下划线‘_'获取表达式的运算结果
> var x = 10 undefined > var y = 15 undefined > x + y 25 > var sum = _ undefined > console.log(sum) 25 undefined >
退出REPL
连续两次Ctrl + c 或者Ctrl + D
Node.js之路【第二篇】Nodejs中的pip(NPM)&REPL的更多相关文章
- node.js+react全栈实践-Form中按照指定路径上传文件并
书接上回,讲到“使用同一个新增弹框”中有未解决的问题,比如复杂的字段,文件,图片上传,这一篇就解决文件上传的问题.这里的场景是在新增弹出框中要上传一个图片,并且这个上传组件放在一个Form中,和其他文 ...
- 【从零开始学习Node.js】一.在CentOS 7中部署Node.js环境
一.背景信息 Node.js是一个基于Chrome V8引擎的JavaScript运行环境,用来方便快速地搭建易于扩展的网络应用.Node.js使用了一个事件驱动.非阻塞式I/O的模型,使其轻量又高效 ...
- 第二篇 Flask 中的 Render Redirect HttpResponse
第二篇 Flask 中的 Render Redirect HttpResponse 1.Flask中的HTTPResponse 在Flask 中的HttpResponse 在我们看来其实就是直接返 ...
- Node.js之路【第三篇】NodeJS异步实现
NodeJS异步实现 Node.js异步编程的直接体现就是回调,它依托于回调来实现,但不能说使用了回调他就是异步了 回调函数在完成任务后就会被调用,Node使用了大量的回调函数,Node所有的API都 ...
- Node.js之路【第一篇】初识Node.js
什么是Node.js 1.Node.js就是运行在服务端的JavaScrip. 2.Node.js是一个基于Chrome JavaScrip运行时简历的一个平台. 3.Node.js是一个非阻塞I/O ...
- 一名全栈工程师Node.js之路-转
Node.js 全球现状 虽然 Node.js 在国内没有盛行,但据 StackOverflow 2016 年开发者调查,其中 node.js .全栈.JavaScript 相关的技术在多个领域(包括 ...
- Node.js 笔记(一) nodejs、npm、express安装
Windows平台下的node.js安装 直接去nodejs的官网http://nodejs.org/上下载nodejs安装程序,双击安装就可以了 测试安装是否成功: 在命令行输入 node –v 应 ...
- Node.js 笔记(一) nodejs、npm、express安装(转)
转载地址:http://blog.csdn.net/haidaochen/article/details/7257655 Windows平台下的node.js安装 直接去nodejs的官网http:/ ...
- Flask最强攻略 - 跟DragonFire学Flask - 第二篇 Flask 中的 Render Redirect HttpResponse
1.Flask中的HTTPResponse 在Flask 中的HttpResponse 在我们看来其实就是直接返回字符串 2.Flask中的Redirect 每当访问"/redi" ...
随机推荐
- 1.2 - C#语言习惯 - 用运行时常量readonly而不是编译期常量const
C#中有两种类型的常量:编译期常量和运行时常量.二者有着截然不同的行为,使用不当将会带来性能上或正确性上的问题. 这两个问题最好都不要发生,不过若难以同时避免的话,那么一个略微慢一些但能保证正确的程序 ...
- mysql 自定义函数
原文:http://www.cnblogs.com/zhangminghui/p/4113160.html 引言 MySQL本身提供了内置函数,这些函数的存在给我们日常的开发和数据操作带来了很大的便利 ...
- webform(九)——JQuery基础(选择器、事件、DOM操作)
JQuery -- 一个js函数包 一.选择器 1.基本选择器 ①id选择器:# ②class选择器:. ③标签名选择:标签名 ④并列选择:用,隔开 ⑤后代选 ...
- SQL语句查数据库中某一列是否有重复项
Select 列名,COUNT(列名)FROM 表名GROUP BY 列名HAVING COUNT( 列名 ) 〉1
- 织梦dedecms漏洞修复大全(5.7起)
很多人说dedecms不好,因为用的人多了,找漏洞的人也多了,那么如果我们能修复的话,这些都不是问题. 好,我们来一个一个修复.修复方法都是下载目录下该文件,然后替换或添加部分代码,保存后上传覆盖(记 ...
- Java实现office文档与pdf文档的在线预览功能
最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完.压力略大.后面查找百度资料.以及在同事与网友的帮助下,四天多把它做完 ...
- 【每日一linux命令5】命令的结合与定向
命令中除了一般命令外,还有管道(或称途径)(|)与定向(>或>>). 管道(途径)的用法: "命令一[选项]"|"命令二[选项]",也就是将& ...
- Lambert(朗伯)光照模型 和Half Lambert的区别
Lambert-它不包括任何任何镜面属性,对粗糙物体来说,这项属性是非常有用的,它不会反射出周围的环境.Lambert材质可以是透明的,在光线追踪渲染中发生折射,但是如果没有镜面属性,该类型就不会发生 ...
- Linux多线程编程
线程和进程的区别是: 进程是拷贝主进程的数据段和代码段的. 线程是和主进程公用一份数据段和代码段的. 线程一旦创建,就从指定的入口函数开始执行. 相关头文件: #include <pthread ...
- Linux之shell篇
shell是用户与系统交互的界面,这是基本方式之一.标准的shell为bash. shell的操作: 显示所有使用过的命令:history. 执行最近执行过的一条指令:!!.首先会给出执行的是哪一条指 ...