{"id":25495714,"url":"https://github.com/corcd/private","last_synced_at":"2026-04-20T13:07:28.249Z","repository":{"id":118087089,"uuid":"340321391","full_name":"corcd/private","owner":"corcd","description":"私有化部署工具包","archived":false,"fork":false,"pushed_at":"2021-11-20T16:14:10.000Z","size":672,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-11-17T03:36:25.600Z","etag":null,"topics":["define","vue","webpack"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/corcd.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-19T09:34:19.000Z","updated_at":"2021-11-20T16:14:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"d9394337-9178-40fb-a0b9-cee5160b7657","html_url":"https://github.com/corcd/private","commit_stats":{"total_commits":24,"total_committers":1,"mean_commits":24.0,"dds":0.0,"last_synced_commit":"5b1f3f2a3afca0267bfcd17efdff85507f9ec95a"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corcd%2Fprivate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corcd%2Fprivate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corcd%2Fprivate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corcd%2Fprivate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/corcd","download_url":"https://codeload.github.com/corcd/private/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239576821,"owners_count":19662112,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["define","vue","webpack"],"created_at":"2025-02-19T00:38:47.611Z","updated_at":"2025-11-09T16:30:17.828Z","avatar_url":"https://github.com/corcd.png","language":"TypeScript","readme":"\u003c!--\n * @Author: Whzcorcd\n * @Date: 2021-02-19 16:44:44\n * @LastEditors: Whzcorcd\n * @LastEditTime: 2021-11-20 22:43:26\n * @Description: file content\n--\u003e\n\n# @gdyfe/private\n\n云平台前端私有化部署标准工具包 V2\n\nV2 版本存在破坏性更新，若仍使用旧版本，请访问 [V1 版本](https://github.com/corcd/private/tree/v1.2.2)\n\n## Install\n\n#### NPM 安装\n\n- `npm install --save @gdyfe/private`\n\n- `pnpm add @gdyfe/private`\n\n- `yarn add @gdyfe/private`\n\n#### 直接引用\n\n- `dist/index.module.js` \u0026 `dist/plugin.js`\n\n## Description\n\n`@gdyfe/private` 在 V2.2+ 版本分成了四个部分，除了 `Private-Cli` 命令行工具外，其余三个部分分别为 `PrivateDefinePlugin`、`WarpPlugin` 和 `VuePrivatePlugin`\n\n### Private-Cli 命令行工具\n\n`Private-Cli` 命令行工具提供了整合式执行命令行，可以在无需手动增加 package.json 的配置的情况下，实现多环境目标命令执行\n\n### PrivateDefinePlugin 插件\n\n`PrivateDefinePlugin` 整合了原 `@gdyfe/private-define-plugin` 插件的能力，用以在 Webpack 环境下定义全局环境变量\n\n\u003e 从 dist/plugin.js 引入\n\n### WrapPlugin 插件 \u0026 VuePrivatePlugin 插件\n\n`WrapPlugin` 即为原插件内 `wrapPrivate()` 方法和 `getPrivateProperty()` 方法的集合\n\n`VuePrivatePlugin` 即为原 Vue 自定义指令插件\n\n\u003e 从 dist/index.js 引入\n\n## Usage\n\n### Private-Cli 命令行工具\n\n使用 `private-cli` 访问此命令行工具，需要预先安装 Node 环境\n\n#### private-cli version\n\n```bash\nprivate-cli --version / -v\n```\n\n查看命令行工具版本\n\n#### private-cli create\n\n```bash\nprivate-cli create\n```\n\n创建 private.config.js 模板文件\n\n#### private-cli build\n\n```bash\nprivate-cli build \u003cenv\u003e\n```\n\n执行对应环境的预定义的构建命令\n\n#### private-cli serve\n\n```bash\nprivate-cli serve \u003cenv\u003e\n```\n\n执行对应环境的预定义的开发命令\n\n### PrivateDefinePlugin\n\n基于 Webpack 4+ 的私有化部署参数定义插件，仅可在 Node 环境下使用\n\n```javascript\n// webpack.config.js / vue.config.js\nconst PrivateDefinePlugin = require('@gdyfe/private/dist/plugin').default\n\n{\n  ...\n  plugins: [\n    new PrivateDefinePlugin(),\n    ...\n  ]\n}\n```\n\n预定义的全局变量：\n\n- `APP_PRIVATE_RUN_SERVER` 私有化环境名\n\n- `APP_PRIVATE_STATUS` 私有化状态\n\n- `APP_PRIVATE_CONFIG` 私有化配置\n\n- `APP_PRIVATE_DATA` 私有化全局数据\n\n### WrapPlugin\n\n#### 引入\n\n```javascript\nimport PrivatePlugin from '@gdyfe/private'\nconst { wrapPrivate, getPrivateProperty } = PrivatePlugin.WrapPlugin\n```\n\n#### wrapPrivate 方法\n\n包装函数，根据使用模式和匹配的环境变量参数，来决定是否执行回调函数\n\n\u003e 可以结合定制开发的 babel 插件实现更完整的私有化处理，即在非对应环境中直接去除无副作用的函数部分\n\n`const wrapPrivate[pattern](value: string[], fn: Function) =\u003e void`\n\n- pattern：使用模式，支持 `include` 和 `exclude`，`include` 表示允许执行，`exclude` 表示忽略执行\n- value：接受一个字符串数组参数，其中包含的元素即为匹配的环境变量参数\n- fn：回调函数\n\n```javascript\nimport PrivatePlugin from '@gdyfe/private'\nconst { wrapPrivate } = PrivatePlugin.WrapPlugin\n\nwrapPrivate.include(['***'], () =\u003e {\n  // doing something\n})\nwrapPrivate.exclude(['***'], () =\u003e {\n  // doing something\n})\n```\n\n### VuePrivatePlugin\n\n#### 装载\n\n```javascript\n// Vue2 项目：\nimport Vue from 'vue'\nimport PrivatePlugin from '@gdyfe/private'\nconst { VuePrivatePlugin } = PrivatePlugin\n\nVue.use(VuePrivatePlugin)\n\n\n// Vue3 项目：\nimport { createApp } from 'vue'\nimport PrivatePlugin from '@gdyfe/private'\nconst { VuePrivatePlugin } = PrivatePlugin\n\ncreateApp(app).use(VuePrivatePlugin)\n```\n\n#### 正向选择\n\n使用方式 `v-private:include=\"['**', '****']\"`，接受一个数组参数（非 String），其中包含的元素即为 **允许渲染** 的环境变量参数\n\n#### 反向选择\n\n使用方式 `v-private:exclude=\"['**', '****']\"`，接受一个数组参数（非 String），其中包含的元素即为 **禁止渲染** 的环境变量参数\n\n#### 全局 getter 属性\n\n提供全局注入的计算属性\n\n- ~~`getPrivateStatus`~~ `this.privateStatus` 用于获取工具启用状态\n- ~~`getPrivateInfo`~~ `this.privateRunServer` 用于获取私有化部署的目标环境\n- `this.privateData` 用于获取私有化部署目标对应的环境变量参数\n\n## Configuration\n\n~~使用 `Private.config` / `Vue.prototype.$privateConfig` 获取/设置工具配置~~\n\n不再使用运行时配置，现在使用外部配置文件静态配置（例如：private.config.js/private.json/.privaterc 等）\n\n配置项包含 `enabled`、 `independentSymbol`、`env`、 `common` 和 `targets`（示例见下文）\n\n- `enabled` 表示是否启用插件自定义指令功能（默认值为 `true`）\n- `independentSymbol` 表示是否使用独立命名的私有化数据获取标识（而非默认的 process.env 数据，默认值为 `true`）\n- `env` 表示环境配置\n- `common` 表示公共的私有化全局配置变量\n- `targets` 表示对应键名的环境下私有化全局配置变量对象，当其中存在与 `common` 中重名的变量时，会浅拷贝覆盖后者\n\n\u003e 下列键名为插件保留的关键字，不能用作于 `targets` 下私有化全局配置变量的键名，否则可能会导致插件无法正常\n\u003e\n\u003e ```javascript\n\u003e PRIVATE_RUN_SERVER = 'APP_PRIVATE_RUN_SERVER'\n\u003e PRIVATE_STATUS = 'APP_PRIVATE_STATUS'\n\u003e PRIVATE_CONFIG = 'APP_PRIVATE_CONFIG'\n\u003e PRIVATE_GLOBAL_KEY = 'APP_PRIVATE_DATA'\n\u003e \n\u003e CI_CONFIG_NAME = 'ci-config'\n\u003e MODULE_NAME = 'private'\n\u003e ```\n\n## Define\n\nTypescript 环境下，需要对全局变量进行定义，示例：\n\n```typescript\n// shims-private.d.ts\ndeclare const APP_PRIVATE_RUN_SERVER: string\ndeclare const APP_PRIVATE_STATUS: boolean\ndeclare const APP_PRIVATE_CONFIG: { enabled: boolean, independentSymbol: boolean}\ndeclare const APP_PRIVATE_DATA: Record\u003cstring, string | number\u003e\n```\n\n## Sample\n\n### private.config.js\n\n```javascript\nmodule.exports = {\n  enabled: true,\n  independentSymbol: false,\n  env: [\n    {\n      name: 'huawei',\n      cmd: {\n        build: ['build'],\n        serve: ['serve']\n      },\n      options: {\n        private: true,\n        run_server: 'huawei'\n      }\n    }\n  ],\n  common: {\n    'APP_PORT': 80,\n    'APP_SSL_PORT': 443,\n  },\n  targets:\n  {\n    cm: {\n      'APP_RUN_ENV': 'production'\n    },\n    vvku: {\n      'APP_PORT': 8080,\n      'APP_SSL_PORT': 8443,\n      'APP_RUN_ENV': 'development'\n    },\n    ...\n  }\n}\n```\n\n### Vue project\n\n工程化依赖于内置插件 `PrivateDefinePlugin`，必须配套使用\n\n\u003e 如想要手动使用，需提前定义全局环境变量 `process.env.private` \u0026 `process.env.run_server`\n\n```html\n\u003ctemplate id=\"t\"\u003e\n  \u003cdiv class=\"container\"\u003e\n    \u003ctooltip\n      v-private:include=\"['cmcc', 'preview']\"\n      class=\"tooltip\"\n    \u003e\n  \u003c/div\u003e\n\u003c/template\u003e\n```\n\n## 项目依赖\n\nNode \u003e= 14.0.0\nWebpack \u003e= 4.0.0\n\n## Todo\n\n- [x] 原生 Typescript 支持\n- [x] 支持 Vue 3 生态\n- [ ] 路由级的函数 API\n- [ ] 低侵入式私有化权限控制\n- [x] 支持 Babel 插件增强功能\n- [x] 支持命令行工具\n\n## License\n\nMIT\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcorcd%2Fprivate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcorcd%2Fprivate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcorcd%2Fprivate/lists"}