Skip to content

Commit

Permalink
feat: 编译uvue.runtime时替换@vue/shared的isIntegerKey
Browse files Browse the repository at this point in the history
  • Loading branch information
Wangyaqi committed Jan 10, 2025
1 parent 92e0260 commit 125760f
Show file tree
Hide file tree
Showing 7 changed files with 233 additions and 24 deletions.
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
"@babel/core": "^7.23.3",
"@babel/parser": "^7.23.9",
"@babel/preset-env": "^7.20.2",
"@babel/generator": "^7.25.6",
"@dcloudio/types": "3.4.14",
"@dcloudio/uni-api": "workspace:*",
"@dcloudio/uni-app": "workspace:*",
Expand Down Expand Up @@ -117,4 +118,4 @@
},
"packageManager": "[email protected]",
"name": "uni-app-next"
}
}
90 changes: 75 additions & 15 deletions packages/uni-app-vue/build.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
[
{
"input": {
"src/service/index.ts": ["dist/vue.runtime.esm.dev.js"]
"src/service/index.ts": [
"dist/vue.runtime.esm.dev.js"
]
},
"output": {
"freeze": false
Expand All @@ -13,12 +15,18 @@
"__VUE_PROD_HYDRATION_MISMATCH_DETAILS__": "false",
"process.env.NODE_ENV": "\"development\""
},
"external": ["@vue/shared", "@vue/reactivity", "@dcloudio/uni-shared"],
"external": [
"@vue/shared",
"@vue/reactivity",
"@dcloudio/uni-shared"
],
"babel": true
},
{
"input": {
"src/service/index.ts": ["dist/vue.runtime.esm.prod.js"]
"src/service/index.ts": [
"dist/vue.runtime.esm.prod.js"
]
},
"output": {
"freeze": false
Expand All @@ -30,24 +38,34 @@
"__VUE_PROD_HYDRATION_MISMATCH_DETAILS__": "false",
"process.env.NODE_ENV": "\"production\""
},
"external": ["@vue/shared", "@vue/reactivity", "@dcloudio/uni-shared"],
"external": [
"@vue/shared",
"@vue/reactivity",
"@dcloudio/uni-shared"
],
"babel": true
},
{
"input": {
"src/view/index.ts": ["dist/view.runtime.esm.js"]
"src/view/index.ts": [
"dist/view.runtime.esm.js"
]
},
"replacements": {
"__X__": "false",
"__VUE_OPTIONS_API__": "true",
"__VUE_PROD_DEVTOOLS__": "false",
"__VUE_PROD_HYDRATION_MISMATCH_DETAILS__": "false"
},
"external": ["@vue/shared"]
"external": [
"@vue/shared"
]
},
{
"input": {
"src/nvue/index.ts": ["dist/nvue.runtime.esm.dev.js"]
"src/nvue/index.ts": [
"dist/nvue.runtime.esm.dev.js"
]
},
"output": {
"freeze": false
Expand All @@ -59,12 +77,18 @@
"__VUE_PROD_HYDRATION_MISMATCH_DETAILS__": "false",
"process.env.NODE_ENV": "\"development\""
},
"external": ["@vue/shared", "@vue/reactivity", "@dcloudio/uni-shared"],
"external": [
"@vue/shared",
"@vue/reactivity",
"@dcloudio/uni-shared"
],
"babel": true
},
{
"input": {
"src/nvue/index.ts": ["dist/nvue.runtime.esm.prod.js"]
"src/nvue/index.ts": [
"dist/nvue.runtime.esm.prod.js"
]
},
"output": {
"freeze": false
Expand All @@ -76,12 +100,18 @@
"__VUE_PROD_HYDRATION_MISMATCH_DETAILS__": "false",
"process.env.NODE_ENV": "\"production\""
},
"external": ["@vue/shared", "@vue/reactivity", "@dcloudio/uni-shared"],
"external": [
"@vue/shared",
"@vue/reactivity",
"@dcloudio/uni-shared"
],
"babel": true
},
{
"input": {
"src/uvue/index.ts": ["dist/uvue.runtime.esm.dev.js"]
"src/uvue/index.ts": [
"dist/uvue.runtime.esm.dev.js"
]
},
"output": {
"freeze": false
Expand All @@ -93,12 +123,28 @@
"__VUE_PROD_HYDRATION_MISMATCH_DETAILS__": "false",
"process.env.NODE_ENV": "\"development\""
},
"external": ["@dcloudio/uni-nvue-styler"],
"importReplacements": [
{
"module": "@vue/shared",
"specifiers": [
{
"name": "isIntegerKey",
"replaceModule": "@dcloudio/uni-shared",
"replaceName": "isIntegerKey"
}
]
}
],
"external": [
"@dcloudio/uni-nvue-styler"
],
"babel": true
},
{
"input": {
"src/uvue/index.ts": ["dist/uvue.runtime.esm.prod.js"]
"src/uvue/index.ts": [
"dist/uvue.runtime.esm.prod.js"
]
},
"output": {
"freeze": false
Expand All @@ -110,7 +156,21 @@
"__VUE_PROD_HYDRATION_MISMATCH_DETAILS__": "false",
"process.env.NODE_ENV": "\"production\""
},
"external": ["@dcloudio/uni-nvue-styler"],
"importReplacements": [
{
"module": "@vue/shared",
"specifiers": [
{
"name": "isIntegerKey",
"replaceModule": "@dcloudio/uni-shared",
"replaceName": "isIntegerKey"
}
]
}
],
"external": [
"@dcloudio/uni-nvue-styler"
],
"babel": true
}
]
]
1 change: 1 addition & 0 deletions packages/uni-shared/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ export { default as Emitter } from './TinyEmitter'
export * from './theme'

export * from './node/locale'
export * from './polyfill'
1 change: 1 addition & 0 deletions packages/uni-shared/src/polyfill/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './utils'
20 changes: 20 additions & 0 deletions packages/uni-shared/src/polyfill/utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
const isStringIntegerKey = (key: unknown) =>
typeof key === 'string' &&
key !== 'NaN' &&
key[0] !== '-' &&
'' + parseInt(key, 10) === key

const isNumberIntegerKey = (key: unknown) =>
typeof key === 'number' &&
!isNaN(key) &&
key >= 0 &&
parseInt(key + '', 10) === key

/**
* 用于替代@vue/shared的isIntegerKey,原始方法在鸿蒙arkts中会引发bug。根本原因是arkts的数组的key是数字而不是字符串。
* 目前这个方法使用的地方都和数组有关,切记不能挪作他用。
* @param key
* @returns
*/
export const isIntegerKey = (key: unknown) =>
isNumberIntegerKey(key) || isStringIntegerKey(key)
28 changes: 28 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 125760f

Please sign in to comment.