0. node 命令行参数选项 1. 模块导出: exports与module.exports区别; module.exports 导出便是将要被导出的对象,exports则可认为是module.exports的引用对象(exports本身仅是一个空对象,此时用来声明接口)(两者均指向对一个对象的变量), 实际上被导出或者说被require的便是module.exports对象指向的对象,而exports对象会在模块执行结束后被释放,但module不会。 module.exports也可为导出函数(或构造函数) 2. 模块引入: require路径记载解析规则以及内置模块、node_modules目录模块、相对路径和绝对路径下的自定义模块、NODE_PATH环境变量设置。 3. 包(文件目录)组织和导出 对于多个模块或较大的代码管理时采用包的形式来管理。 1. 指定导出包下的模块,由导出模块组织子模块; 2. index.js替代指定导出模块,以简化require书写格式,路径中可不需包含导出模块名(index模块名可不写,只写对应的包目录路径即可); 3. package.json文件(一般称之为元数据文件),组织管理包中的模块(可更复杂、完善、规范的包开发),也简化了require书写格式; 或者结合2和3或1和3均可(main字段的值对应的js文件模块作为包的入口接口模块)。 如果package.json或main字段不存在,会尝试寻找index.js作为包的接口。 package.json以及index.js可通过在包目录下执行"npm init"命令来产生package.json文件并配置必要的字段。 4. 工程目录 一般结构: some_package: bin // 存放相关产生的文件或依赖的文件或包装的可执行文件、cmd/bat/sh等文件 doc // 存放相关文档 lib // 一般存放API相关的源码 node_modules // 一般存放第三方的包 test // 存放测试用例集 package.json // 元数据描述文件 README.md // 说明文件 config // 存放配置文件 其他 // 其他信息或许可证等 5. NPM(包管理工具) 用途:从NPM服务器下载他人编写的三方包或者命令行程序到本地使用、或者上传自己编写的包或命令行程序上传到NPM服务器供他人使用。 下载第三方包或命令行程序: npm install some_package // 此后便会在当前目录下下载指定的包,下载的内容将存放在所在当前目录下的node_modules目录中。 通过该方式引入的第三方包在使用的时候,在代码中只需要通过require("some_package")即可,无需指定路径(相对或绝对等)。 npm install some_package@1.0.1 // 此方式还可以下载指定版本的包 此外对于依赖多个三方包时,则可在项目的元数据描述文件中的dependencies属性中指定依赖包列表以及对应版本,这样在package.json所在目录下执行npm install即可下载所有的依赖包; 上传到npm服务器后,他人下载该包时也会自动下载其依赖的其他三方包。 (以上提到的当前目录一般是说当前命令行所在目录,此外安装命令行程序(即该包的package.json中bin字段有可用的命令行程序), 则也可以是通过npm install -g xxx方式,全局安装到某个位置; 可用npm config get prefix查询该位置,全局安装可重复利用、便于管理包;而不带=g选项安装方式称之为本地安装;此外全局安装可能会写入path环境变量,而本地安装不会) (NPM包管理处理比较友好,而Python包管理比较混乱、容易产生版本冲突,可借助virtualenv来解决包管理问题,以产生独立的环境) 上传自己编写的包或者命令行程序: npm adduser // 注册、添加NPM账号; 若添加成功,可通过 npm whoami命令查询是否成功,取得了账号。 编辑自己的包或命令行程序的package.json文件,指定必要的字段(可通过npm init命令产生该文件); (一般为name包名(需NPM服务器下名称唯一)、version版本号、dependencies三方包依赖列表、main入口模块位置、bin命令行程序名和主模块位置); 在package.json所在目录下运行npm publish发布代码。 NPM其他功能选项,参数,可通过npm help xxx查看对应的资料、文档说明,如npm、help、update、cache、public、install、unpublish等。