package.json詳解

{
  // 工程名,如果要publish到npm倉庫,需要唯一
  "name": "yoantd", 
  // 版本號(hào), 主版本號(hào).次版本號(hào).修訂版本號(hào), 后兩個(gè)版本號(hào)是兼容版本號(hào)
  "version": "1.0.0", 
  // 描述
  "description": "antd組件庫封裝", 
  // 入口文件,發(fā)布到npm被其他工程依賴時(shí),如import yoantd from 'yoantd'時(shí)加載的就是main指向的文件
  "main": "dist/index.js",
  // 防止意外發(fā)布到公有庫,'true時(shí)npm會(huì)拒絕發(fā)布
  "private": true, 
  // 設(shè)置環(huán)境變量,在node環(huán)境下可以獲取,下面再詳解怎么使用環(huán)境變量
  "config": {
    "data": "testconfig"
  },
  // 許可證,讓別人知道可以怎么使用源碼
  // MIT是一種開源協(xié)議,基本不做任何限制,如果不希望別人使用可以設(shè)置為UNLICENSED
  "license": " MIT",
  // 關(guān)鍵字,在npm倉庫可以根據(jù)關(guān)鍵字搜到包
  "keywords": ["yoantd", "yocoder"],
  // 自定義npm命令,`npm run test`
  "scripts": {
    "test": "echo test",
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
     ...
  },
  // 依賴管理,運(yùn)行時(shí)依賴,npm i時(shí)下載。
  "dependencies": {
    "antd": "4.0.3", // 指定版本號(hào)4.0.3
    "react": "^16.13.1", // 自動(dòng)更新最左邊的非0數(shù)字的右側(cè),npm i時(shí)安裝16.lastest.lastest
    "uxcore": "^0.22.21", // 0.22.lastest
    "react-dom": "~16.13.1", // 自動(dòng)更新修訂版本號(hào),16.3.lastest
    "react-router-dom": ">5.1.2", // 大于5.1.2
    ...
  },
  // 依賴管理,開發(fā)時(shí)依賴,打包檢查工具等,npm i時(shí)下載
  "devDependencies": {
   "@babel/plugin-proposal-decorators": "^7.8.3",
    ...
  },
  // 可選依賴, 允許不安裝或安裝失敗
  "optionalDependencies": {
    "puppeteer": "^1.6.0"
  },

dependencies和devDependencies區(qū)別

如果不publish則沒有區(qū)別,npm i 的時(shí)候都會(huì)下載依賴。
如果把這個(gè)工程publish到npm倉庫,在其他工程執(zhí)行npm i yoantd時(shí),會(huì)自動(dòng)下載yoantd工程的dependencies依賴,而devDependencies不會(huì)被下載。

process.env環(huán)境變量的使用

1. 在package.json里設(shè)置config
  "config": {
    "data": "testconfig"
  },

在node環(huán)境下可以通過process.env.npm_package_config_*獲取,比如設(shè)置如上的config,就可以通過process.env.npm_package_config_data獲取到testconfig這個(gè)值。
這種設(shè)置方式,是對(duì)所有的scripts生效的,如果想對(duì)npm start和npm run build設(shè)置不同的環(huán)境變量,可以使用 cross-env

2. 使用cross-env
  • 安裝 npm i cross-env --save-dev
  • 在scripts命令里加環(huán)境變量
  "scripts": {
    "start": "cross-env cmd=start env=dev react-app-rewired start",
    "build": "cross-env cmd=build env=pro react-app-rewired build",
     ...
  },
  • node環(huán)境里使用
    start啟動(dòng)時(shí)可以取到值process.evn.cmd=start,process.evn.env=dev;
    build打包時(shí)可以取到值process.evn.cmd=build,process.evn.env=pro

細(xì)心的你是否注意到,上面說的是node環(huán)境里使用,就是只能在webpack或者node server等node環(huán)境里使用。如果想在代碼里使用,還需要加點(diǎn)配置。

添加webpack.DefinePlugin配置如下,這樣就可以在代碼里當(dāng)成全局變量來使用process.env.data,process.env.cmd,process.env.env了。我這里使用react-app-rewired的config-overrides.js文件進(jìn)行配置,如果你想了解可以參考我的另一篇文章《create-react-app不用eject配置webpack

const webpack = require("webpack");
const {
  override,
  addWebpackPlugin,
} = require("customize-cra");

module.exports = override(
  addWebpackPlugin(
    new webpack.DefinePlugin({
      "process.env.data": JSON.stringify(process.env.data),
      "process.env.cmd": JSON.stringify(process.env.cmd),
      "process.env.env": JSON.stringify(process.env.env),
    })
  ),
);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容