npm脚本学习(一)打包:cross-env NODE_ENV=production env_config=uat node build/build.js

很好奇npm脚本(package.json中的scripts)都是什么意思,然后就开始一点一点去学习,觉得越挖越觉得自己知道的东西太少了,所以记录一下自己学到的一些知识。

一、process.env

process对象是一个node的全局变量,是在node应用程序中始终可用的,在终端中输入node,再输入process.env就可以输出一些用户环境信息,但输入process.env.NODE_ENV显示的的undefined
在这里插入图片描述
二、process.env.NODE_ENV
NODE_ENV属性并不是process.env的原有属性,而是人为定义的
1.再webpack4之前通过DefinePlugin来定义当前的环境,DefinePlugin允许我们创建全局变量,可以在编译时进行设置,因此我们可以使用该属性来设置全局变量来区分开发环境和正式环境

const webpack = require('webpack');

module.exports = {
    entry: {
        app: './src/app'
    },
    output: {
        path: 'dist',
        filename: 'bundle.js'
    },
    plugins: [
        new webpack.DefinePlugin({
           'process.env.NODE_ENV':  JSON.stringify(process.env.NODE_ENV)
        })
    ]
};

如果直接打印process.env.NODE_ENV,输出结果为undefined,因为我们没有给它设置值
需要在package.json的scripts中设置,就可以打印出来了

"build:uat": "cross-env NODE_ENV=production env_config=uat node build/build.js"
"build:prod": "cross-env NODE_ENV=production env_config=prod node build/build.js",

2.在webpack4之后中直接在mode中配置

const webpack = require('webpack');

module.exports = {
	mode: 'development',
    entry: {
        app: './src/app'
    },
    output: {
        path: 'dist',
        filename: 'bundle.js'
    }
};

三、cross-env
在这里插入图片描述
由于上边这个问题,cross-env就出现了,它是运行跨平台设置和使用环境变量的脚本,我们就可以不受平台的限制,使用它设置NODE_ENV为不同的参数打包了

以上方案,根据以下package.json配置{ "private": true, "scripts": { "analyze": "cross-env ANALYZE=1 umi build", "start": "cross-env UMI_ENV=local umi dev", "build:dev": "cross-env UMI_ENV=dev umi build", "build:test": "cross-env UMI_ENV=test umi build", "build:uat": "cross-env UMI_ENV=uat umi build", "build:prod": "cross-env UMI_ENV=prod umi build", "check:model": "umi dva list model", "postinstall": "umi generate tmp", "prettier": "prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'", "test": "umi-test", "test:coverage": "umi-test --coverage" }, "gitHooks": { "pre-commit": "lint-staged" }, "engines": { "node": ">= 16.14.0" }, "lint-staged": { "*.{js,jsx,less,md,json}": [ "prettier --write" ], "*.ts?(x)": [ "prettier --parser=typescript --write" ] }, "dependencies": { "@ant-design/pro-layout": "^6.5.0", "antd": "4.24.0", "antd-img-crop": "^3.16.0", "axios": "^1.6.8", "braft-editor": "^2.3.9", "braft-extensions": "^0.1.1", "classnames": "^2.2.6", "clipboard": "^2.0.8", "crypto-js": "^4.1.1", "dva-model-extend": "^0.1.2", "easy-email-core": "^4.16.1", "easy-email-editor": "^4.16.1", "jsencrypt": "3.2.1", "less-vars-to-js": "^1.3.0", "locales": "^0.0.2", "lodash": "^4.17.21", "lrz": "^4.9.41", "mjml-browser": "^4.15.3", "moment": "^2.25.3", "nprogress": "^0.2.0", "react": "17.0.0", "react-color": "^2.19.3", "react-dnd": "^14.0.4", "react-dom": "17.0.0", "react-final-form": "^6.5.9", "react-webcam": "^7.2.0", "store": "2.0.12", "umi": "3.5.20", "yarn": "^1.22.22" }, "devDependencies": { "@lingui/babel-preset-react": "^2.9.0", "@types/crypto-js": "^4.0.2", "@types/lodash": "^4.14.176", "@types/nprogress": "^0.2.0", "@types/qs": "^6.9.7", "@types/react": "17.0.0", "@types/react-dom": "17.0.0", "@typescript-eslint/eslint-plugin": "^5.2.0", "@typescript-eslint/parser": "^5.2.0", "@umijs/preset-react": "^2.1.7", "cross-env": "^7.0.3", "eslint": "^8.1.0", "eslint-plugin-react": "^7.26.1", "lint-staged": "^10.0.7", "prettier": "^2.2.0", "typescript": "^4.1.2", "yorkie": "^2.0.0", "zip-webpack-plugin": "^4.0.1" }, "resolutions": { "@types/react": "17.0.0", "@types/react-dom": "17.0.0", "immer": "9.0.7" }, "preinstall": "npm install --package-lock-only --ignore-scripts && npx npm-force-resolutions" },重新制定方案
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值