From 20fc721c4f6fb8991f47b2d8425092106e6a82e6 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Mon, 15 Mar 2021 18:47:51 +0800 Subject: [PATCH 1/3] feat: a `defineConfig` API from `@vue/cli-service` for better type support in vue.config.js Just like the API with the same name in Vite. --- packages/@vue/cli-service/lib/Service.js | 11 +++++++++++ packages/@vue/cli-service/types/index.d.ts | 5 +++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/@vue/cli-service/lib/Service.js b/packages/@vue/cli-service/lib/Service.js index 2216adcfde..392ada2e36 100644 --- a/packages/@vue/cli-service/lib/Service.js +++ b/packages/@vue/cli-service/lib/Service.js @@ -436,3 +436,14 @@ function cloneRuleNames (to, from) { } }) } + +/** + * @typedef {import('../types/index').ConfigFunction} ConfigFunction + * @typedef {import('../types/index').ProjectOptions} ProjectOptions + * @typedef {ProjectOptions|ConfigFunction} UserConfig + * @param {UserConfig} config + * @returns UserConfig + */ +module.exports.defineConfig = function defineConfig (config) { + return config +} diff --git a/packages/@vue/cli-service/types/index.d.ts b/packages/@vue/cli-service/types/index.d.ts index dfb5e7f2d7..0bee1a3db8 100644 --- a/packages/@vue/cli-service/types/index.d.ts +++ b/packages/@vue/cli-service/types/index.d.ts @@ -3,7 +3,7 @@ import ChainableConfig = require('webpack-chain') import webpack = require('webpack') import WebpackDevServer = require('webpack-dev-server') import express = require('express') // @types/webpack-dev-server depends on @types/express -import { ProjectOptions } from './ProjectOptions' +import { ProjectOptions, ConfigFunction } from './ProjectOptions' type RegisterCommandFn = (args: minimist.ParsedArgs, rawArgv: string[]) => any @@ -134,4 +134,5 @@ type ServicePlugin = ( ) => any export { ProjectOptions, ServicePlugin, PluginAPI } -export { ConfigFunction } from './ProjectOptions' +type UserConfig = ProjectOptions | ConfigFunction +export function defineConfig(config: UserConfig): UserConfig From e2cf7cdbf45f775898689bbdde9697062541e234 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Tue, 16 Mar 2021 16:05:26 +0800 Subject: [PATCH 2/3] chore: simplify the type annotation --- packages/@vue/cli-service/lib/Service.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/packages/@vue/cli-service/lib/Service.js b/packages/@vue/cli-service/lib/Service.js index 392ada2e36..032f7069a5 100644 --- a/packages/@vue/cli-service/lib/Service.js +++ b/packages/@vue/cli-service/lib/Service.js @@ -437,13 +437,5 @@ function cloneRuleNames (to, from) { }) } -/** - * @typedef {import('../types/index').ConfigFunction} ConfigFunction - * @typedef {import('../types/index').ProjectOptions} ProjectOptions - * @typedef {ProjectOptions|ConfigFunction} UserConfig - * @param {UserConfig} config - * @returns UserConfig - */ -module.exports.defineConfig = function defineConfig (config) { - return config -} +/** @type {import('../types/index').defineConfig} */ +module.exports.defineConfig = (config) => config From 628c1ffe94dc7faf68f1056daf22526df0e16b82 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Wed, 17 Mar 2021 21:24:47 +0800 Subject: [PATCH 3/3] docs: mention `defineConfig` helper in the documentation --- docs/config/README.md | 11 +++++++++++ docs/zh/config/README.md | 12 ++++++++++++ 2 files changed, 23 insertions(+) diff --git a/docs/config/README.md b/docs/config/README.md index b2a6f720a8..239c16412a 100644 --- a/docs/config/README.md +++ b/docs/config/README.md @@ -27,6 +27,17 @@ module.exports = { } ``` +Or, you can use the `defineConfig` helper from `@vue/cli-service`, which could provide better intellisense support: + +```js +// vue.config.js +const { defineConfig } = require('@vue/cli-service') + +module.exports = defineConfig({ + // options... +}) +``` + ### baseUrl Deprecated since Vue CLI 3.3, please use [`publicPath`](#publicPath) instead. diff --git a/docs/zh/config/README.md b/docs/zh/config/README.md index 752d3e5015..d3fb522d45 100644 --- a/docs/zh/config/README.md +++ b/docs/zh/config/README.md @@ -26,6 +26,18 @@ module.exports = { // 选项... } ``` + +或者,你也可以使用 `@vue/cli-service` 提供的 `defineConfig` 帮手函数,以获得更好的类型提示: + +```js +// vue.config.js +const { defineConfig } = require('@vue/cli-service') + +module.exports = defineConfig({ + // 选项 +}) +``` + ### baseUrl 从 Vue CLI 3.3 起已弃用,请使用[`publicPath`](#publicpath)。