题目1: 如何全局安装一个 node 应用?
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。
可以让js在服务端运行的工具
npm install -g xxx 命令会全局安装一个命令
题目2: package.json 有什么作用?
package.json必须是一个严格的json文件,而不仅仅是js里边的一个对象。其中很多属性可以通过npm-config来生成。配置好依赖后,别人在使用代码时可以npm install
直接安装依赖,方便快捷,减少代码体积。
name
name属性就是你的模块名称,下面是一些命名规则:
name必须小于等于214个字节,包括前缀名称在内(如 xxx/xxxmodule)。
name不能以""或"."开头
不能含有大写字母
name会成为url的一部分,不能含有url非法字符下面是官网文档的一些建议:
不要使用和node核心模块一样的名称
name中不要含有"js"和"node"。 It's assumed that it's js, since you're writing a package.json file, and you can specify the engine using the "engines" field. (See below.)
name属性会成为模块url、命令行中的一个参数或者一个文件夹名称,任何非url安全的字符在name中都不能使用,也不能以""或"."开头
name属性也许会被写在require()的参数中,所以最好取个简短而语义化的值。
创建一个模块前可以先到后边的网址查查name是否已经被占用. https://www.npmjs.com/
version
version必须可以被npm依赖的一个node-semver模块解析。具体规则见下面的dependencies模块
description
一个描述,方便别人了解你的模块作用,搜索的时候也有用。
keywords
一个字符串数组,方便别人搜索到本模块
homepage
项目主页url
注意: 这个项目主页url和url属性不同,如果你填写了url属性,npm注册工具会认为你把项目发布到其他地方了,获取模块的时候不会从npm官方仓库获取,而是会重定向到url属性配置的地址。
bugs
可选字段,问题追踪系统的URL或邮箱地址;npm bugs用的上。
{ "url" :"http://github.com/owner/project/issues",
"email" :"project@hostname.com"
}
license
你应该为你的模块制定一个协议,让用户知道他们有何权限来使用你的模块,以及使用该模块有哪些限制。最简单的,例如你用BSD-3-Clause 或 MIT之类的协议,如下:{ "license" : "BSD-3-Clause" }你可以在https://spdx.org/licenses/这个地址查阅协议列表 。
author, contributors
author是一个人,contributors是一组人。
Author的格式如下:
{ "name" : "Barney Rubble",
"email" : "b@rubble.com",
"url" : "http://barnyrubble.tumblr.com/"
}
这种格式也可以:
"Barney Rubble <b@rubble.com> (http://barnyrubble.tumblr.com/)"
files
项目包含的一组文件。如果是文件夹,文件夹下的文件也会被包含。如果需要把某些文件不包含在项目中,添加一个”.npmignore”文件。这个文件和”gitignore”类似。
main
这个字段的值是你程序主入口模块的ID。如果其他用户需要你的包,当用户调用require()方法时,返回的就是这个模块的导出(exports)。
bin
很多的包都会有执行文件需要安装到PATH中去。
这个字段对应的是一个Map,每个元素对应一个{ 命令名:文件名 }。
{ "bin" : { "npm" : "./cli.js" } }
script
scripts属性是一个对象,里边指定了项目的生命周期个各个环节需要执行的命令。key是生命周期中的事件,value是要执行的命令。具体的内容有 install start stop 等,详见https://docs.npmjs.com/misc/scripts
dependencies
dependencies属性是一个对象,配置模块依赖的模块列表,key是模块名称,value是版本范围,版本范围是一个字符,可以被一个或多个空格分割。dependencies也可以被指定为一个git地址或者一个压缩包地址。不要把测试工具或transpilers写到dependencies中。
version 精确匹配版本
>version 必须大于某个版本
>=version 大于等于
<version 小于
<=versionversion 小于
~version "约等于",具体规则详见semver文档
^version "兼容版本"具体规则详见semver文档
1.2.x 仅一点二点几的版本
[http://](http:)... 见下面url作为denpendencies的说明
任何版本
"" 空字符,和*相同
version1 - version2 相当于 >=version1 <=version2.
range1 || range2 范围1和范围2满足任意一个都行
题目3: npm install --save app 与 npm install --save-dev app有什么区别?
- -save和save-dev可以省掉你手动修改package.json文件的步骤。
- npm install -save module-name自动把模块和版本号添加到dependencies部分,产品发布时依赖模块。
- npm install -save-dev module-name自动把模块和版本号添加到devdependencies部分,开发过程中依赖模块。
题目4: nodule_modules的查找路径是怎样的?
从本地文件开始一直往上查找至系统根目录
所以全局安装到根目录后才可以在任何文件目录下使用命令。