为了研究VOID的代码,学习一波Typecho的主题,大致翻阅了nodejs,JavaScript,jQuery的相关语法以及基础使用,VOID的主题还使用了gulp来打包代码,所以也大概了解一下Gulp。再次记录一下一些遇到的问题以及解答。
遇到的问题
- Node.js全局安装和本地安装有什么区别?
全局安装后可以供命令行(command line)使用,用户可以在命令行中直接运行该组件包支持的命令;
本地安装后可以直接通过require()的方式引入项目中node_modules目录下的模块,如下示例,本地安装后直接在gulpfile.js中require('gulp')。 - 全局安装了gulp为啥还要本地安装?
这是gulp为了版本和依赖的控制。全局安装gulp是为了执行gulp任务,即能让命令行运行gulp相关命令,本地安装gulp是为了调用gulp插件的功能。方便你在不同的项目中使用不同版本的 gulp,如果仅在全局装一个 gulp 所有项目就只能使用同一个版本的 gulp 了。
Node.js命令记录:
npm查看与帮助:
npm -v #查看版本
npm --version #查看版本
npm help #查看帮助
npm help folders #查看npm使用的所有文件夹
npm bin
npm安装模块:
npm install <name>
npm install <name> @2.5.0 #安装express指定版本
npm i nstall -g <name> #全局安装,-g等效于-global
npm install <name>@>=0.2.0<0.2.9 #安装这个范围的版本
npm install <name> --save #安装的同时,将信息写入package.json项目路径中的dependencies
npm install <name> --save-dev #安装的同时,将信息写入package.json项目路径中devDependencies
npm install <name> --save-optional #参数安装的模块写到package.json中的opntionalDependencies中
npm install <name>@<tag> #安装指定tag版本,如latest
npm install <name> -force #强制拉取远程资源,即使本地已经安装这个模块
npm install <tarball> #安装本地模块文件, 例如npm install ./package.tgz
npm install <tarball url> #安装指定URL模块文件, 例如npm install https://github.com/indexzero/forever/tarball/v0.5.6
查看node模块:
npm show <name> #显示express信息
npm view <name> dependencies #查看包依赖关系
npm view <name> repository.url #查看包的源文件地址
npm view <name> engines #查看包所依赖的node版本
npm list #模块列表
npm list parseable=true #以目录形式展现当前安装的所有node包
npm outdated #列出过时的包
npm search [search terms] #查找模块 search 可以替换为s或se
操作node模块:
npm update <name> #更新包
npm remove <name> #移除包,remove等效于rm、r两个命令
npm uninstall <name> (-g) #卸载包,uninstall 等效于un命令,不会删除package.json内dependencies对应系项
npm update #更新
npm rebuild <name> #更改包内容后重建
执行node脚本:
npm start [<name>] #运行package的start脚本,该脚本写在package.json文件script的start字段中
npm stop [<name>]
npm test [<name>]
创建工程:
npm init #引导创建一个package.json,包括版本、名称、作者等信息
npm search #packageName 发布一个包前,验证包是否存在
npm help json #以默认的方式打开一个网页,如果更改了默认打开程序则可能不会以网页的形式打开。
发布模块:
npm publish <tarball> #经过gzip压缩并归档的一个URL或文件路径,该压缩包包含单个目录,且该目录内包含package.json
npm publish <folder> #包含package.json的目录
Node命令:
node -v #查看node安装版本
node --version #查看node安装版本
node cli.js install npm -gf #安装npm最新版
node cli.js install npm@1.0.105 gf #安装npm指定版本
#ctrl+c两次即退出node
node #进入 > 即命令行状态
.help #查 看帮 助
.exit #退出
require("express") #命令行状态下检查express是否安装正确
npm配置npm config set <key> <value> [-global]:
npm root #查看当前包的安装路径
npm root -g #查看全局的包的安装路径
npm config ls -l #查看当前的目录设置
npm ls #查看安装的模块及依赖
npm ls -g #查看全局安装的模块及依赖
npm get global #查看安装模式
npm set gobal=true #设定全局安装模式
npm cache clean //清理缓存
npm config delete <key> #删除配置
npm config edit #在编辑器中打开npm配置文件
#在nodejs下新建node_global文件夹和node_cache文件夹,设置全局模块及cache路径
npm config set prefix "E:\nodejs\node_global" #设置全局模块安装地址
npm config set cache "E:\nodejs\node_cache" #设置cache路径
#删除C:\Program Files\nodejs\node_modules\npm #目录下的npmrc文件
#在.npmrc文件中最后一行写入registry = http://registry.cnpmjs.org
npm config set registry https: //registry.npm.taobao.org #设置npm库
npm config get registry #查看npm库地址
npm config set proxy http://10177495:zydSuccess2015@proxymsn.zte.com.cn:80 #设置代理地址
npm config get proxy #查看 代理地址
package.json文件
每个项目的根目录下面,一般都有一个package.json
文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install
命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。
package.json
文件至少要有两部分内容:
- “name”
全部小写,没有空格,可以使用下划线或者横线
“version”
- x.x.x 的格式
- 符合“语义化版本规则”
{
"name":"Hello World",
"version":"0.0.1",
"author":"张三",
"description":"第一个node.js程序",
"keywords":[
"node.js",
"javascript"
],
"repository":{
"type":"git",
"url":"https://path/to/url"
},
"license":"MIT",
"engines":{
"node":"0.10.x"
},
"bugs":{
"url":"http://path/to/bug",
"email":"bug@example.com"
},
"contributors":[
{
"name":"李四",
"email":"lisi@example.com"
}
],
"scripts":{
"preinstall":"echo here it comes!",
"postinstall":"echo there it goes!",
"start":"node index.js",
"test":"tap test/*.js"
},
"dependencies":{
"express":"latest",
"mongoose":"~3.8.3",
"handlebars-runtime":"~1.0.12",
"express3-handlebars":"~0.5.0",
"MD5":"~1.2.0"
},
"devDependencies":{
"bower":"~1.2.8",
"grunt":"~0.4.1",
"grunt-contrib-concat":"~0.3.0",
"grunt-contrib-jshint":"~0.7.2",
"grunt-contrib-uglify":"~0.2.7",
"grunt-contrib-clean":"~0.5.0",
"browserify":"2.36.1",
"grunt-browserify":"~1.3.0",
"gulp":"^4.0.0",
"gulp-autoprefixer":"^6.0.0",
"gulp-clean-css":"^4.0.0",
"gulp-concat":"^2.6.1",
"gulp-rev":"^9.0.0",
"gulp-rev-collector":"^1.3.1",
"gulp-sass":"^4.0.2",
"gulp-uglify":"^3.0.1"
}
}
其他必要字段说明:
- scripts字段
scripts
指定了运行脚本命令的npm命令行缩写,比如start指定了运行npm run start
时,所要执行的命令。
上面的设置指定了npm run preinstall
、npm run postinstall
、npm run start
、npm run test
时,所要执行的命令。 dependencies字段,devDependencies字段
dependencies
字段指定了项目运行所依赖的模块,devDependencies
指定项目开发所需要的模块。
它们都指向一个对象。该对象的各个成员,分别由模块名和对应的版本要求组成,表示依赖的模块及其版本范围。- 指定版本:比如
1.2.2
,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。 - 波浪号(tilde)+指定版本:比如
~1.2.2
,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。 - 插入号(caret)+指定版本:比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
- latest:安装最新版本。
- 指定版本:比如
其他
- description:描述信息,有助于搜索
- main: 入口文件,一般都是 index.js
- scripts:支持的脚本,默认是一个空的 test
- keywords:关键字,有助于在人们使用 npm search 搜索时发现你的项目
- author:作者信息
- license:默认是 MIT
- bugs:当前项目的一些错误信息,如果有的话
- contributors:贡献者
package.json文件可以手工编写,也可以使用npm init
命令自动生成。
$ npm init
这个命令采用互动方式,要求用户回答一些问题,然后在当前目录生成一个基本的package.json文件。所有问题之中,只有项目名称(name)和项目版本(version)是必填的,其他都是选填的。
如果一个模块不在package.json
文件之中,可以单独安装这个模块,并使用相应的参数,将其写入package.json
文件之中。
$ npm install express --save
$ npm install express --save-dev