1: 如何全局安装一个 node 应用?
-
npm install xxx
本地安装 -
npm install -g xxx
全局安装 - 区别
- 本地安装,则是将模块下载到当前命令行所在目录。
- 全局安装,模块将被下载安装到全局目录中,即Node的安装目录下的node_modules下
- 在代码中,本地安装可以直接通过require()的方式引入;var moduleName = require('moduleName');
- 全局的安装是供命令行(command line)使用的,比如grunt,全局安装的方式是没有办法用require调用包的;
2: package.json 有什么作用?
每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。
- package.json文件中的字段说明:
- scripts指定了运行脚本命令的npm命令行缩写
"scripts": {
"preinstall": "echo here it comes!",
"postinstall": "echo there it goes!",
"start": "node index.js",
"test": "tap test/*.js"
}
- dependencies字段指定了项目运行所依赖的模块,devDependencies指定项目开发环境所需要的模块。
{
"devDependencies": {
"browserify": "~13.0.0",//模版名+版本
"karma-browserify": "~5.0.1"
}
}
- bin项用来指定各个内部命令对应的可执行文件的位置。
"bin": {
"someTool": "./bin/someTool.js"
}
- main字段指定了加载的入口文件,require('moduleName')就会加载这个文件。这个字段的默认值是模块根目录下面的index.js。
- name:项目名称
- version:版本
- description:描述说明
- keywords:关键字
......
3: npm install --save app 与 npm install --save-dev app有什么区别?
npm install --save app
npm install --save-dev app
上面代码表示单独安装app模块,--save参数表示将该模块写入dependencies属性,--save-dev表示将该模块写入devDependencies属性。
4: nodule_modules的查找路径是怎样的?
比如需要查找的依赖包叫“easytpl”,它会先在当前目录下查找node_module, 看有没有easytpl文件夹(即easytpl包),如果有的话,会读取easytpl文件夹下的package.json,找到里面的main参数,加载main里对应的路径的文件。如果当前目录下没有node_module,或当前目录下的node_module没找到easytpl,便向上级目录中查询,直到系统根目录。
5: npm3与 npm2相比有什么改进?yarn和 npm 相比有什么优势? (选做题目)
- npm3与 npm2
- npm2是纯粹的不共享包的原则。
- npm是node.js的包依赖管理工具,不过有时时侯项目依赖过多,造成路径过深,超过了操作系统的文件深度限制。NPM3对此做了很大改进。简单的来说将传统的嵌套结构改为了平铺结构。
- yarn
- 极致的快速—会缓存已经下载过的包,避免重复下载
- 安全 — 下载前会检查签名及包的完整性