dependencies和devDependencies的区别

647 阅读2分钟
{
  "name": "fs",
  "version": "0.0.0",
  "scripts": {
    "dev": "vite",
    "build": "tsc && vite build",
    "serve": "vite preview"
  },
  "dependencies": {
    "react": "^17.0.0",
    "react-dom": "^17.0.0"
  },
  "devDependencies": {
    "@types/react": "^17.0.0",
    "@types/react-dom": "^17.0.0",
    "@vitejs/plugin-react": "^1.0.0",
    "typescript": "^4.3.2",
    "vite": "^2.6.4",
    "@typescript-eslint/eslint-plugin": "^5.3.0",
    "@typescript-eslint/parser": "^5.3.0",
    "eslint": "^8.1.0",
    "eslint-config-airbnb-base": "^14.2.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-import": "^2.25.3",
    "eslint-plugin-prettier": "^4.0.0",
    "prettier": "^2.4.1"
  }
}

上图是一个Vite创建的React-TS项目的package.json文件内的内容,发现里面的dependenciesdevDependencies字段看名字很相似,而且内部都是包内容相关的东西,那么这两者有什么不同呢?

先说结论:devDependencies开发环境使用,也就是我们本地使用

dependencies生产环境使用,线上或者测试环境。

举例说明

本地运行代码的时候,我们是用TypeScript代码,但是本地的环境是没办法运行TS代码,这时候借助webpack等打包工具来将它转化成JS代码,那么你就需要类似babel的东西。有的时候你引入的包需要TS版本,那么你就引入'@types/react'这种类似的包。你想让自己写的代码很规范,你需要有工具来在本地校验的你代码,这时候你引入eslint。所以类似这种在本地帮助你能够开发或者更好开发的东西,都是安装在devDependencies,他们仅仅是在本地运行就可以。

关于生产环境你要明白,生产环境跑的代码是怎样的代码,是你打包好生成代码(也就是能够在浏览器运行的代码JS),还有依赖的第三方库React等,这些都是线上环境必须的,因此都是安装在 dependencies下。我们拿eslint举列子,你的代码不规范浏览器能够识别吗?能够的,你要明白,我们的代码是给人看,让机器运行的,机器是不管你的代码规范不规范,生产环境要求的是依赖的东西在就可以,很明显eslint根本不是线上环境所依赖的

yarn和install

那么如何使用yarn和install安装到devDependencies和dependencies呢?

yarn
yarn add xxxx -D   // 安装xxx到devDependencies

yarn add xxx       // 安装xxx到dependencies
npm
npm install xxxx --save-dev 或者 -D   // 安装xxx到devDependencies

npm install xxxx --save 或者 -S   // 安装xxx到dependencies