记录package.json 和lock文件

623 阅读2分钟

1.package.json 是什么

  • package.json 文件其实就是对项目或者模块包的描述,里面包含许多元信息。比如项目名称,项目版本,项目执行入口文件,项目贡献者等等。该文件可以手动创建,也可以npm init,或者通过三方脚手架 vue-cli (vue create myapp)/cra(npx create-react-app my-app)

  • {
      "name": "webappdemo",
      "version": "0.1.0",
      "private": true,
      "scripts": {
        "start": "vue-cli-service serve --mode dev",
        "test:unit": "vue-cli-service test:unit",
        "lint": "vue-cli-service lint",
        "dev": "vue-cli-service serve"
      },
      "dependencies": {
        "vant": "^2.8.4",
        "vue": "^2.6.11",
        "vue-class-component": "^7.2.3",
        "vue-clipboard2": "^0.3.1",
        "vue-property-decorator": "^8.4.2",
        "vue-router": "^3.2.0",
        "vuex": "^3.4.0",
        "vuex-class": "^0.3.2"
      },
      "devDependencies": {
        "axios": "^0.19.2",
        "node-sass": "^4.12.0",
        "sass-loader": "^8.0.2",
        "ts-import-plugin": "^1.6.6",
        "typescript": "~3.9.3",
        "vue-template-compiler": "^2.6.11"
      },
      "eslintConfig": {
        "root": true,
        "env": {
          "node": true
        },
        "extends": [
          "plugin:vue/essential",
          "@vue/standard",
          "@vue/typescript/recommended"
        ],
        "parserOptions": {
          "ecmaVersion": 2020
        },
        "rules": {
          "indent": "off"
        },
        "overrides": [
          {
            "files": [
              "**/__tests__/*.{j,t}s?(x)",
              "**/tests/unit/**/*.spec.{j,t}s?(x)"
            ],
            "env": {
              "jest": true
            }
          }
        ]
      },
      "browserslist": [
        "> 1%",
        "last 2 versions",
        "not dead"
      ],
      "jest": {
        "preset": "@vue/cli-plugin-unit-jest/presets/typescript-and-babel"
      }
    }
    
    
  • Npm install 会安装当前项目下的所有依赖,

2.package-lock.json 是什么

  • 项目npm install 时会生成lock文件

  • "axios": {
          "version": "0.19.2",
          "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.19.2.tgz?cache=0&sync_timestamp=1597979791211&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.19.2.tgz",
          "integrity": "sha1-PqNsXYgY0NX4qKl6bTa4bNwAyyc=",
          "requires": {
            "follow-redirects": "1.5.10"
          }
        },
    
  • 记录了在任意时刻安装的确切依赖 包含版本号 下载地址 时间戳等

3.要不要加在项目仓库里(要)

  • 仅靠package.json安装依赖版本无法控制,不能保证(不同设备,不同npm版本,不同源,不同时间)安装的依赖相同。原因是package.json里面指定的版本号会自动升级

    "react-redux": "~7.2.0", // 补丁版本都可接受 7.2.0-7.2.9
    "redux": ">=4.0.4", // 大于某个版本
    "redux-thunk": "^2.3.0",//小版本都可接受 >=2.3.0 <3.0.0
    "teaset": "*", // *,表示>=0.0.0的任意版本
    "axios": "1.1.1" //必须依赖1.1.1版本
    
  • 使用lock时可以保证所有的同事(npm版本>5.9,源一致)版本号一致

4.lock文件怎么处理

  • 不要手动修改,使用npm install axios 去生成
  • 有冲突时不要修改 删除后重新npm i 生成
  • 不要手动在package.json添加/删除依赖,使用npm install/uninstall
  • 如果不是添加新的依赖,只是单纯的下载依赖请使用npm ci 不会修改package-lock

5. Npm 常用指令

npm -v 
sudo npm install -g npm // window系统不需要sudo
npm init 初始化项目生成package.json
npm install axios -S / --save
npm install axios -D
npm config set registry https://registry.npm.taobao.org     更改 npm 的下载镜像为淘宝镜像
npm uninstall axios // 删除axios 但是不删除package.json中的信息
npm uninstall axios --save // 删除package.json中 dependencies的信息
npm uninstall axios --save-dev  // 删除package.json中 devDependencies的信息