# npm理论

# 定义

  • Node Package Manager,是一个NodeJS包管理和分发工具
  • 2020年3月17日,Github收购npm,并保证npm将永远免费

# 结构

npm由三部分组成,网站,命令行接口,仓库

  • 网站:用于发现包,设置属性等
  • 命令行接口:通过命令行运行,是大多数开发人员与npm交互的方式
  • 仓库:保存了javaScript软件及其元数据信息的大型公共仓库

# 实践

# 上传公共仓库

  • 命令行: npm login
  • 命令行: npm init
  • 命令行: 编辑代码
  • 命令行: npm publish

# 模块协作

  • exports 和require配合使用(commonjs的语法)

    • 使用 exports或者modulre.exports导出
    //命名为 test.js
    let a= 1;
    let b = [1];
    let c = {'name':'1'}
    let d = function (){return 1;}
    
    exports.a = a;
    exports.b = b;
    exports.c = c;
    exports.d = d;
    
    //或者
    module.exports={a,b,c,d}
    
    • 使用 require导入
    let test = require('test')
    console.log(test.a)
    console.log(test.b)
    console.log(test.c)
    console.log(test.d)
    
  • export和import导入导出(es6的语法)

    • 使用export 或者 export default导出(同文件中不能同时使用两种导出方式)
    //命名为 test.js
    let a= 1;
    let b = [1];
    let c = {'name':'1'}
    let d = function (){return 1;}
    
    export {a,b,c,d}
    //或者
    export default {a,b,c,d}
    
    • 使用import导入
    import {a as a,b as b,c as c,d as d} from 'test'
    
    import test from 'test' //使用 export default时,不需要加括号
    
    console.log(a)
    console.log(test.a)
    
  • es6语法中,exportexport default的主要区别

    • export导出常量,不能导出变量;export const a = 1合法,const a=1;export a非法,可使用const a=1;export {a}
    • export导出时,称作命名模块,import导入时,要带大括号
    • export default导出时,称作匿名模块, import导入时,不用带大括号

# 包版本说明

  • 版本语义

    代码状态 阶段 规则 示例
    首次发布 新产品 从1.0.0开始 1.0.0
    向后兼容的错误修复 补丁发布 增加第三位数字 1.0.1
    向后兼容的新功能 次要版本 增加中间,并将最后一位置0 1.1.0
    破坏向后兼容性的更改 主要版本 增加第一位数字,并将中间和最后一位置为0 2.0.0
  • 版本依赖符号

    更新类型 符号 示例
    接受补丁版本的更新 ~ ~1.0.4或者1.0或者1.0.x
    接受次要版本的更新 ^ ^1.0.4或者1或者1.x
    接受主要版本的更新 * *1.0.4或者x