Skip to content

uniapp-cli npm获取命令行参数

概要

TIP

使用vite创建的项目请见 vue / Vite栏

提示:uniapp 用cli工程创建,npm命令启动编译不同的文件

例如:在package.json中,如下

javascript
"scripts": {
    "build": "node script/index.js",
    "build:h5": "cross-env NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build",
    "build:mp-weixin": "cross-env NODE_ENV=production UNI_PLATFORM=mp-weixin vue-cli-service uni-build",
    // 启动sdy项目
    "dev:h5sdy": "cross-env VUE_APP_HTYPE=SDY NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service uni-serve",
    // 启动xzrc项目
    "dev:h5xzrc": "cross-env VUE_APP_HTYPE=XZRC NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service uni-serve",
    "dev:mp-weixin": "cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch"
  },

以上代码,都可以使用 npm run dev:h5sdy / dev:h5xzrc 启动,其中区别就是 VUE_APP_HTYPE 后面的参数,可以在项目中 process.env.VUE_APP_HTYPE 获取到命令行中的参数

使用场景

提示:这里可以添加技术整体架构

当一个成熟的项目需要为其他公司或机构提供使用时,并不需要重新创建分支或复制一份项目。你可以继续维护当前的分支,并通过条件渲染(例如 v-if)或其他方法来控制不同功能的显示与隐藏。此外,项目的基本配置应该是通用的。

例如在 main.js 中导入项目的基本配置。你可以提前在 utils 文件夹下创建一个 index.js 文件,并根据各自的项目需求,创建不同的配置文件并导入到 index.js 中。

至于如何动态导入 utils 文件夹下的 index.js 文件,你可以参考本教程来实现。动态导入可以使用 import 语句的动态导入语法或者使用 require.ensure 方法进行按需加载。具体的实现方式取决于你使用的构建工具和版本。

技术细节

提示:这里可以添加技术细节

方法一:

javascript
 "scripts": {
    "dev:h5sdy": "cross-env VUE_APP_HTYPE=SDY NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service uni-serve",
    "dev:h5xzrc": "cross-env VUE_APP_HTYPE=XZRC NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service uni-serve",
  },

重点为:VUE_APP_HTYPE=SDY,必须以VUE_APP_开头,否则env读取不到

在项目utils/index.js使用

javascript
import xzrcyyDatas from './xzrcyyDatas.js' // 导入的是各自项目的基础配置
import sdfyyDatas from './sdfyyDatas.js'

const HTYPE = process.env.VUE_APP_HTYPE
const mapSettings = {
  'XZRC': xzrcyyDatas,
  'SDY': sdfyyDatas,
}
let nodeSettings = mapSettings[HTYPE] || ''

if (!nodeSettings) {
  // 如果没有匹配的配置,则抛出错误
  throw new Error('VUE_APP_HTYPE是未知值--请检查是否进行配置')
}

export default nodeSettings

方法二:

javascript
"scripts": {
    "dev:h5sdy": "cross-env NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service uni-serve --H_TYPE=SDY",
    "dev:h5xzrc": "cross-env NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service uni-serve --H_TYPE=XZRC",
  },

重点为:--H_TYPE=XZRC

  • 在vue.config.js中设置
javascript
const webpack = require('webpack')

module.exports = {
  configureWebpack: {
    plugins: [
      new webpack.DefinePlugin({
        'process.argv': JSON.stringify(process.argv)
      })
    ]
  }
}
  • 在项目utils/index.js使用
javascript
import xzrcyyDatas from './xzrcyyDatas.js' // 导入的是各自项目的基础配置
import hytDatas from './hytDatas.js'

let argv = process.argv
let H_TYPE = ''
if (argv.length > 0) {
  argv.map((item, index) => {
    if (item.indexOf('H_TYPE') > -1) {
      let hType = item.split('=')[1]
      H_TYPE = hType
    }
  })
}

let nodeSettings = {}
if (H_TYPE === 'XZRC') {
  nodeSettings = xzrcyyDatas
} else if (H_TYPE === 'SDY') {
  nodeSettings = hytDatas
}
export default nodeSettings

小结

提示:方法二有一定优势,可以在命令行拼接参数,考虑到后期开发不知如何启动,所以傻瓜式了一点

小小棱镜,无限可能