提交 8cf16992 编写于 作者: fxy060608's avatar fxy060608

feat(h5): respect import.meta.env.BASE_URL

上级 e92bbf82
module.exports = [
{
path: 'packages/size-check/dist/assets',
running: false,
},
{
path: 'packages/uni-h5-vue/dist',
running: false,
},
{
path: 'packages/uni-mp-vue/dist',
running: false,
},
{
path: 'packages/uni-mp-alipay/dist',
running: false,
},
{
path: 'packages/uni-mp-baidu/dist',
running: false,
},
{
path: 'packages/uni-mp-qq/dist',
running: false,
},
{
path: 'packages/uni-mp-toutiao/dist',
running: false,
},
{
path: 'packages/uni-mp-weixin/dist',
running: false,
},
{
path: 'packages/uni-quickapp-webview/dist',
running: false,
},
]
...@@ -6,6 +6,11 @@ declare var __PLATFORM__: UniApp.PLATFORM ...@@ -6,6 +6,11 @@ declare var __PLATFORM__: UniApp.PLATFORM
declare var __PLATFORM_PREFIX__: 'wx' | 'qq' | 'my' | 'swan' | 'tt' | 'qa' declare var __PLATFORM_PREFIX__: 'wx' | 'qq' | 'my' | 'swan' | 'tt' | 'qa'
declare var __GLOBAL__: Record<string, any> declare var __GLOBAL__: Record<string, any>
// importMeta(es|cjs)
declare var __IMPORT_META_ENV_BASE_URL__:
| 'import.meta.env.BASE_URL'
| '__IMPORT_META_ENV_BASE_URL__'
// Global compile-time constants // Global compile-time constants
declare var __DEV__: boolean declare var __DEV__: boolean
declare var __TEST__: boolean declare var __TEST__: boolean
......
{ {
"name" : "hello", "name": "hello",
"appid" : "__UNI__4DCD124", "appid": "__UNI__4DCD124",
"description" : "", "description": "",
"versionName" : "1.0.0", "versionName": "1.0.0",
"versionCode" : "100", "versionCode": "100",
"transformPx" : false, "transformPx": false,
/* 5+App特有相关 */ /* 5+App特有相关 */
"app-plus" : { "app-plus": {
"usingComponents" : true, "usingComponents": true,
"nvueStyleCompiler" : "uni-app", "nvueStyleCompiler": "uni-app",
"compilerVersion" : 3, "compilerVersion": 3,
"splashscreen" : { "splashscreen": {
"alwaysShowBeforeRender" : true, "alwaysShowBeforeRender": true,
"waiting" : true, "waiting": true,
"autoclose" : true, "autoclose": true,
"delay" : 0 "delay": 0
},
/* 模块配置 */
"modules" : {},
/* 应用发布信息 */
"distribute" : {
/* android打包配置 */
"android" : {
"permissions" : [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
/* ios打包配置 */
"ios" : {},
/* SDK配置 */
"sdkConfigs" : {}
}
}, },
/* 快应用特有相关 */ /* 模块配置 */
"quickapp" : {}, "modules": {},
/* 小程序特有相关 */ /* 应用发布信息 */
"mp-weixin" : { "distribute": {
"appid" : "", /* android打包配置 */
"setting" : { "android": {
"urlCheck" : false "permissions": [
}, "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"usingComponents" : true "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
}, "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"mp-alipay" : { "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"usingComponents" : true "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
}, "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"mp-baidu" : { "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"usingComponents" : true "<uses-permission android:name=\"android.permission.CAMERA\"/>",
}, "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"mp-toutiao" : { "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"usingComponents" : true "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
}, "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"uniStatistics": { "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"enable": false "<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
/* ios打包配置 */
"ios": {},
/* SDK配置 */
"sdkConfigs": {}
} }
},
/* 快应用特有相关 */
"quickapp": {},
/* 小程序特有相关 */
"mp-weixin": {
"appid": "",
"setting": {
"urlCheck": false
},
"usingComponents": true
},
"mp-alipay": {
"usingComponents": true
},
"mp-baidu": {
"usingComponents": true
},
"mp-toutiao": {
"usingComponents": true
},
"uniStatistics": {
"enable": false
}
} }
...@@ -1917,9 +1917,9 @@ postcss-modules@^4.0.0: ...@@ -1917,9 +1917,9 @@ postcss-modules@^4.0.0:
string-hash "^1.1.1" string-hash "^1.1.1"
postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4:
version "6.0.5" version "6.0.6"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz#042d74e137db83e6f294712096cb413f5aa612c4" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea"
integrity sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg== integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==
dependencies: dependencies:
cssesc "^3.0.0" cssesc "^3.0.0"
util-deprecate "^1.0.2" util-deprecate "^1.0.2"
......
此差异已折叠。
此差异已折叠。
import { ComponentPublicInstance } from 'vue' import { ComponentPublicInstance } from 'vue'
import { getRealRoute } from '@dcloudio/uni-core' import { getRealRoute } from '@dcloudio/uni-core'
declare global {
interface ImportMeta {
env: {
BASE_URL: string
}
}
}
export function findElem(vm: ComponentPublicInstance) { export function findElem(vm: ComponentPublicInstance) {
return vm.$el return vm.$el
} }
...@@ -8,18 +16,9 @@ export function findElem(vm: ComponentPublicInstance) { ...@@ -8,18 +16,9 @@ export function findElem(vm: ComponentPublicInstance) {
const SCHEME_RE = /^([a-z-]+:)?\/\//i const SCHEME_RE = /^([a-z-]+:)?\/\//i
const DATA_RE = /^data:.*,.*/ const DATA_RE = /^data:.*,.*/
const baseUrl = __IMPORT_META_ENV_BASE_URL__
function addBase(filePath: string) { function addBase(filePath: string) {
const base = __uniConfig.router.base return baseUrl + filePath
if (!base) {
return filePath
}
if (base !== '/') {
// 部分地址已经带了base(如被webpack处理过的资源自动带了publicPath)
if (('/' + filePath).indexOf(base) === 0) {
return '/' + filePath
}
}
return base + filePath
} }
export function getRealPath(filePath: string) { export function getRealPath(filePath: string) {
......
...@@ -30,6 +30,10 @@ const rollupPlugins = [ ...@@ -30,6 +30,10 @@ const rollupPlugins = [
defineTaskApi: `/*#__PURE__*/ defineTaskApi`, defineTaskApi: `/*#__PURE__*/ defineTaskApi`,
defineSyncApi: `/*#__PURE__*/ defineSyncApi`, defineSyncApi: `/*#__PURE__*/ defineSyncApi`,
defineAsyncApi: `/*#__PURE__*/ defineAsyncApi`, defineAsyncApi: `/*#__PURE__*/ defineAsyncApi`,
__IMPORT_META_ENV_BASE_URL__:
FORMAT === 'cjs'
? '__IMPORT_META_ENV_BASE_URL__'
: 'import.meta.env.BASE_URL', //直接使用import.meta.env.BASE_URL会被vite替换成'/'
}, },
preventAssignment: true, preventAssignment: true,
}), }),
...@@ -90,6 +94,7 @@ export default defineConfig({ ...@@ -90,6 +94,7 @@ export default defineConfig({
vueJsx({ optimize: true, isCustomElement }), vueJsx({ optimize: true, isCustomElement }),
], ],
build: { build: {
target: 'es2020', // keep import.meta...
emptyOutDir: FORMAT === 'es', emptyOutDir: FORMAT === 'es',
minify: false, minify: false,
lib: { lib: {
......
...@@ -84,8 +84,16 @@ export async function createSSRServer(options: CliOptions & ServerOptions) { ...@@ -84,8 +84,16 @@ export async function createSSRServer(options: CliOptions & ServerOptions) {
? 'https' ? 'https'
: 'http' : 'http'
let port = options.port || serverOptions.port || 3000 let port = options.port || serverOptions.port || 3000
const hostname = options.host let hostname: string | undefined
if (options.host === undefined || options.host === 'localhost') {
// Use a secure default
hostname = '127.0.0.1'
} else if (options.host === true) {
// probably passed --host in the CLI, without arguments
hostname = undefined // undefined typically means 0.0.0.0 or :: (listen on all IPs)
} else {
hostname = options.host as string
}
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const onSuccess = () => { const onSuccess = () => {
const interfaces = os.networkInterfaces() const interfaces = os.networkInterfaces()
......
...@@ -2,7 +2,7 @@ import path from 'path' ...@@ -2,7 +2,7 @@ import path from 'path'
import { extend } from '@vue/shared' import { extend } from '@vue/shared'
import { Plugin, UserConfig } from 'vite' import { Plugin, UserConfig } from 'vite'
import { normalizePath } from '@dcloudio/uni-cli-shared' import { normalizePath, parseManifestJsonOnce } from '@dcloudio/uni-cli-shared'
import { VitePluginUniResolvedOptions } from '..' import { VitePluginUniResolvedOptions } from '..'
import { createCss } from './css' import { createCss } from './css'
...@@ -28,7 +28,9 @@ export function createConfig( ...@@ -28,7 +28,9 @@ export function createConfig(
options.inputDir = normalizeInputDir(config) options.inputDir = normalizeInputDir(config)
options.compiler.init() options.compiler.init()
const define = createDefine(options, config, env) const define = createDefine(options, config, env)
const { h5 } = parseManifestJsonOnce(options.inputDir)
return { return {
base: (h5 && h5.router && h5.router.base) || '',
define: extend(define, options.compiler.define()), define: extend(define, options.compiler.define()),
resolve: createResolve(options, config), resolve: createResolve(options, config),
optimizeDeps: createOptimizeDeps(options), optimizeDeps: createOptimizeDeps(options),
......
...@@ -5,6 +5,7 @@ export function createServer( ...@@ -5,6 +5,7 @@ export function createServer(
_options: VitePluginUniResolvedOptions _options: VitePluginUniResolvedOptions
): UserConfig['server'] { ): UserConfig['server'] {
return { return {
host: true,
watch: { watch: {
ignored: ['**/uniCloud**'], ignored: ['**/uniCloud**'],
}, },
......
import { ResolvedConfig } from 'vite' import { ResolvedConfig } from 'vite'
import { isSsr, rewriteSsrNativeTag, rewriteSsrRenderStyle } from '../utils' import {
isSsr,
initSsrDefine,
rewriteSsrNativeTag,
rewriteSsrRenderStyle,
} from '../utils'
// import alias from 'module-alias' // import alias from 'module-alias'
export function initConfig(config: ResolvedConfig) { export function initConfig(config: ResolvedConfig) {
if (isSsr(config.command, config)) { if (isSsr(config.command, config)) {
initSsrDefine(config)
rewriteSsrNativeTag() rewriteSsrNativeTag()
rewriteSsrRenderStyle(process.env.UNI_INPUT_DIR) rewriteSsrRenderStyle(process.env.UNI_INPUT_DIR)
} }
......
import path from 'path' import path from 'path'
import fs from 'fs-extra' import fs from 'fs-extra'
import { isString, NormalizedStyle } from '@vue/shared' import { extend, isString, NormalizedStyle } from '@vue/shared'
import { import {
isNativeTag, isNativeTag,
createRpx2Unit, createRpx2Unit,
...@@ -32,6 +32,10 @@ export function isSsrManifest( ...@@ -32,6 +32,10 @@ export function isSsrManifest(
return false return false
} }
export function initSsrDefine(config: ResolvedConfig) {
extend(globalThis, { __IMPORT_META_ENV_BASE_URL__: config.env.BASE_URL })
}
function serializeDefine(define: Record<string, any>): string { function serializeDefine(define: Record<string, any>): string {
let res = `{` let res = `{`
for (const key in define) { for (const key in define) {
......
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册