@xiaonoodles/meetfun-i18n 1.2.17 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,245 +1,245 @@
1
- # Webpack 5 路径解析修复说明
2
-
3
- ## 问题根源
4
-
5
- Webpack 5 在处理 npm 包的子路径导入时,默认不会完全遵循 `package.json` 的 `exports` 字段。当使用 `import from 'meetfun-i18n/vue2'` 时,Webpack 会尝试查找物理路径 `node_modules/meetfun-i18n/vue2`。
6
-
7
- ## 解决方案
8
-
9
- 创建了一个真实的 `vue2/` 目录,其中包含:
10
-
11
- ### 目录结构
12
-
13
- ```
14
- meetfun-i18n/
15
- ├── dist/
16
- │ ├── index.js # Vue3 版本
17
- │ ├── index.esm.js
18
- │ └── vue2/
19
- │ ├── index.js # Vue2 实际代码
20
- │ └── index.esm.js
21
- ├── vue2/ # ← 新增物理目录
22
- │ ├── package.json # 指向 dist/vue2
23
- │ ├── index.js # CommonJS 入口
24
- │ ├── index.mjs # ES Module 入口
25
- │ └── index.d.ts # TypeScript 类型
26
- └── package.json
27
- ```
28
-
29
- ### vue2/package.json
30
-
31
- ```json
32
- {
33
- "main": "../dist/vue2/index.js",
34
- "module": "../dist/vue2/index.esm.js",
35
- "types": "../dist/vue2/index.d.ts"
36
- }
37
- ```
38
-
39
- 这个文件告诉 Webpack:
40
- - CommonJS (`require`) → 使用 `../dist/vue2/index.js`
41
- - ES Module (`import`) → 使用 `../dist/vue2/index.esm.js`
42
- - TypeScript → 使用 `../dist/vue2/index.d.ts`
43
-
44
- ### vue2/index.js (CommonJS 入口)
45
-
46
- ```javascript
47
- module.exports = require('../dist/vue2/index.js')
48
- ```
49
-
50
- ### vue2/index.mjs (ES Module 入口)
51
-
52
- ```javascript
53
- export * from '../dist/vue2/index.esm.js'
54
- export { default } from '../dist/vue2/index.esm.js'
55
- ```
56
-
57
- ## 工作原理
58
-
59
- 现在当您使用:
60
- ```javascript
61
- import { createMeetFunI18n } from 'meetfun-i18n/vue2'
62
- ```
63
-
64
- Webpack 会:
65
- 1. 找到 `node_modules/meetfun-i18n/vue2` 目录
66
- 2. 读取 `vue2/package.json`
67
- 3. 根据模块类型选择:
68
- - ES Module → `vue2/index.mjs` → `dist/vue2/index.esm.js`
69
- - CommonJS → `vue2/index.js` → `dist/vue2/index.js`
70
- 4. 最终加载正确的 Vue2 版本代码
71
-
72
- ## 多层保护
73
-
74
- 我们提供了多种方式确保兼容性:
75
-
76
- ### 1. 根目录入口文件
77
- ```
78
- vue2.js # CommonJS
79
- vue2.mjs # ES Module
80
- vue2.d.ts # TypeScript
81
- ```
82
-
83
- ### 2. vue2 目录
84
- ```
85
- vue2/
86
- ├── package.json
87
- ├── index.js
88
- ├── index.mjs
89
- └── index.d.ts
90
- ```
91
-
92
- ### 3. package.json exports
93
- ```json
94
- {
95
- "exports": {
96
- "./vue2": {
97
- "types": "./vue2.d.ts",
98
- "import": "./vue2.mjs",
99
- "require": "./vue2.js"
100
- }
101
- }
102
- }
103
- ```
104
-
105
- 无论打包工具采用哪种解析策略,都能正确找到 Vue2 版本的代码。
106
-
107
- ## 验证方法
108
-
109
- ### 1. 检查文件是否存在
110
-
111
- ```bash
112
- ls node_modules/meetfun-i18n/vue2/
113
- # 应该看到:
114
- # index.js index.mjs index.d.ts package.json
115
- ```
116
-
117
- ### 2. 检查是否加载正确
118
-
119
- 在您的代码中添加:
120
-
121
- ```javascript
122
- import { createMeetFunI18n } from 'meetfun-i18n/vue2'
123
-
124
- // 创建一个测试实例
125
- const i18n = createMeetFunI18n({}, {
126
- queryLangDictHotData: () => {},
127
- queryLangDictColdData: () => {}
128
- })
129
-
130
- const instance = i18n.getI18n()
131
-
132
- // 检查实例类型
133
- console.log('i18n 类型:', instance.constructor.name)
134
- // Vue2 应该输出: VueI18n
135
- // Vue3 会输出: Composer
136
-
137
- console.log('是否有 t 方法:', typeof instance.t)
138
- // Vue2 应该输出: function
139
- ```
140
-
141
- ### 3. 清除缓存后重新安装
142
-
143
- ```bash
144
- # 删除 node_modules
145
- rm -rf node_modules
146
-
147
- # 删除锁文件
148
- rm pnpm-lock.yaml
149
-
150
- # 重新安装
151
- pnpm install
152
-
153
- # 清除构建缓存
154
- rm -rf unpackage # uni-app
155
- rm -rf .cache # Webpack
156
-
157
- # 重新运行
158
- npm run dev
159
- ```
160
-
161
- ## 常见问题
162
-
163
- ### Q: 为什么需要这么多入口文件?
164
-
165
- A: 不同的打包工具和配置有不同的模块解析策略:
166
- - **现代打包工具**(支持 exports)→ 使用 package.json exports
167
- - **Webpack 5**(部分支持)→ 查找物理目录 vue2/
168
- - **老版本工具** → 使用根目录的 vue2.js/vue2.mjs
169
-
170
- 这种多层设计确保最大兼容性。
171
-
172
- ### Q: 如果还是报错怎么办?
173
-
174
- A: 尝试以下步骤:
175
-
176
- 1. **完全重新安装**
177
- ```bash
178
- rm -rf node_modules pnpm-lock.yaml
179
- pnpm install
180
- ```
181
-
182
- 2. **清除所有缓存**
183
- ```bash
184
- rm -rf unpackage .cache dist
185
- ```
186
-
187
- 3. **检查 vue-i18n 版本**
188
- ```bash
189
- pnpm list vue-i18n
190
- # Vue2 项目应该是 8.x.x
191
- ```
192
-
193
- 4. **强制安装正确版本**
194
- ```bash
195
- pnpm add vue-i18n@^8.0.0 --force
196
- ```
197
-
198
- ### Q: TypeScript 提示找不到模块?
199
-
200
- A: 在 `tsconfig.json` 中添加:
201
-
202
- ```json
203
- {
204
- "compilerOptions": {
205
- "moduleResolution": "node",
206
- "resolveJsonModule": true,
207
- "esModuleInterop": true
208
- }
209
- }
210
- ```
211
-
212
- ## 更新步骤
213
-
214
- 用户需要更新到最新版本:
215
-
216
- ```bash
217
- # 更新包
218
- pnpm update meetfun-i18n
219
-
220
- # 或指定版本
221
- pnpm add meetfun-i18n@1.2.1
222
-
223
- # 验证安装
224
- ls node_modules/meetfun-i18n/vue2/
225
- ```
226
-
227
- ## 测试结果
228
-
229
- 更新后,以下导入应该都能正常工作:
230
-
231
- ```javascript
232
- // ✅ 所有这些方式都应该能工作
233
- import { createMeetFunI18n } from 'meetfun-i18n/vue2'
234
- const { createMeetFunI18n } = require('meetfun-i18n/vue2')
235
-
236
- // ✅ TypeScript 也能正确识别类型
237
- import type { I18nConfig } from 'meetfun-i18n/vue2'
238
- ```
239
-
240
- ## 相关文档
241
-
242
- - [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) - 故障排除完整指南
243
- - [TEST_IMPORT.md](./TEST_IMPORT.md) - 导入测试说明
244
- - [VUE2_USAGE.md](./VUE2_USAGE.md) - Vue2 使用指南
245
-
1
+ # Webpack 5 路径解析修复说明
2
+
3
+ ## 问题根源
4
+
5
+ Webpack 5 在处理 npm 包的子路径导入时,默认不会完全遵循 `package.json` 的 `exports` 字段。当使用 `import from 'meetfun-i18n/vue2'` 时,Webpack 会尝试查找物理路径 `node_modules/meetfun-i18n/vue2`。
6
+
7
+ ## 解决方案
8
+
9
+ 创建了一个真实的 `vue2/` 目录,其中包含:
10
+
11
+ ### 目录结构
12
+
13
+ ```
14
+ meetfun-i18n/
15
+ ├── dist/
16
+ │ ├── index.js # Vue3 版本
17
+ │ ├── index.esm.js
18
+ │ └── vue2/
19
+ │ ├── index.js # Vue2 实际代码
20
+ │ └── index.esm.js
21
+ ├── vue2/ # ← 新增物理目录
22
+ │ ├── package.json # 指向 dist/vue2
23
+ │ ├── index.js # CommonJS 入口
24
+ │ ├── index.mjs # ES Module 入口
25
+ │ └── index.d.ts # TypeScript 类型
26
+ └── package.json
27
+ ```
28
+
29
+ ### vue2/package.json
30
+
31
+ ```json
32
+ {
33
+ "main": "../dist/vue2/index.js",
34
+ "module": "../dist/vue2/index.esm.js",
35
+ "types": "../dist/vue2/index.d.ts"
36
+ }
37
+ ```
38
+
39
+ 这个文件告诉 Webpack:
40
+ - CommonJS (`require`) → 使用 `../dist/vue2/index.js`
41
+ - ES Module (`import`) → 使用 `../dist/vue2/index.esm.js`
42
+ - TypeScript → 使用 `../dist/vue2/index.d.ts`
43
+
44
+ ### vue2/index.js (CommonJS 入口)
45
+
46
+ ```javascript
47
+ module.exports = require('../dist/vue2/index.js')
48
+ ```
49
+
50
+ ### vue2/index.mjs (ES Module 入口)
51
+
52
+ ```javascript
53
+ export * from '../dist/vue2/index.esm.js'
54
+ export { default } from '../dist/vue2/index.esm.js'
55
+ ```
56
+
57
+ ## 工作原理
58
+
59
+ 现在当您使用:
60
+ ```javascript
61
+ import { createMeetFunI18n } from 'meetfun-i18n/vue2'
62
+ ```
63
+
64
+ Webpack 会:
65
+ 1. 找到 `node_modules/meetfun-i18n/vue2` 目录
66
+ 2. 读取 `vue2/package.json`
67
+ 3. 根据模块类型选择:
68
+ - ES Module → `vue2/index.mjs` → `dist/vue2/index.esm.js`
69
+ - CommonJS → `vue2/index.js` → `dist/vue2/index.js`
70
+ 4. 最终加载正确的 Vue2 版本代码
71
+
72
+ ## 多层保护
73
+
74
+ 我们提供了多种方式确保兼容性:
75
+
76
+ ### 1. 根目录入口文件
77
+ ```
78
+ vue2.js # CommonJS
79
+ vue2.mjs # ES Module
80
+ vue2.d.ts # TypeScript
81
+ ```
82
+
83
+ ### 2. vue2 目录
84
+ ```
85
+ vue2/
86
+ ├── package.json
87
+ ├── index.js
88
+ ├── index.mjs
89
+ └── index.d.ts
90
+ ```
91
+
92
+ ### 3. package.json exports
93
+ ```json
94
+ {
95
+ "exports": {
96
+ "./vue2": {
97
+ "types": "./vue2.d.ts",
98
+ "import": "./vue2.mjs",
99
+ "require": "./vue2.js"
100
+ }
101
+ }
102
+ }
103
+ ```
104
+
105
+ 无论打包工具采用哪种解析策略,都能正确找到 Vue2 版本的代码。
106
+
107
+ ## 验证方法
108
+
109
+ ### 1. 检查文件是否存在
110
+
111
+ ```bash
112
+ ls node_modules/meetfun-i18n/vue2/
113
+ # 应该看到:
114
+ # index.js index.mjs index.d.ts package.json
115
+ ```
116
+
117
+ ### 2. 检查是否加载正确
118
+
119
+ 在您的代码中添加:
120
+
121
+ ```javascript
122
+ import { createMeetFunI18n } from 'meetfun-i18n/vue2'
123
+
124
+ // 创建一个测试实例
125
+ const i18n = createMeetFunI18n({}, {
126
+ queryLangDictHotData: () => {},
127
+ queryLangDictColdData: () => {}
128
+ })
129
+
130
+ const instance = i18n.getI18n()
131
+
132
+ // 检查实例类型
133
+ console.log('i18n 类型:', instance.constructor.name)
134
+ // Vue2 应该输出: VueI18n
135
+ // Vue3 会输出: Composer
136
+
137
+ console.log('是否有 t 方法:', typeof instance.t)
138
+ // Vue2 应该输出: function
139
+ ```
140
+
141
+ ### 3. 清除缓存后重新安装
142
+
143
+ ```bash
144
+ # 删除 node_modules
145
+ rm -rf node_modules
146
+
147
+ # 删除锁文件
148
+ rm pnpm-lock.yaml
149
+
150
+ # 重新安装
151
+ pnpm install
152
+
153
+ # 清除构建缓存
154
+ rm -rf unpackage # uni-app
155
+ rm -rf .cache # Webpack
156
+
157
+ # 重新运行
158
+ npm run dev
159
+ ```
160
+
161
+ ## 常见问题
162
+
163
+ ### Q: 为什么需要这么多入口文件?
164
+
165
+ A: 不同的打包工具和配置有不同的模块解析策略:
166
+ - **现代打包工具**(支持 exports)→ 使用 package.json exports
167
+ - **Webpack 5**(部分支持)→ 查找物理目录 vue2/
168
+ - **老版本工具** → 使用根目录的 vue2.js/vue2.mjs
169
+
170
+ 这种多层设计确保最大兼容性。
171
+
172
+ ### Q: 如果还是报错怎么办?
173
+
174
+ A: 尝试以下步骤:
175
+
176
+ 1. **完全重新安装**
177
+ ```bash
178
+ rm -rf node_modules pnpm-lock.yaml
179
+ pnpm install
180
+ ```
181
+
182
+ 2. **清除所有缓存**
183
+ ```bash
184
+ rm -rf unpackage .cache dist
185
+ ```
186
+
187
+ 3. **检查 vue-i18n 版本**
188
+ ```bash
189
+ pnpm list vue-i18n
190
+ # Vue2 项目应该是 8.x.x
191
+ ```
192
+
193
+ 4. **强制安装正确版本**
194
+ ```bash
195
+ pnpm add vue-i18n@^8.0.0 --force
196
+ ```
197
+
198
+ ### Q: TypeScript 提示找不到模块?
199
+
200
+ A: 在 `tsconfig.json` 中添加:
201
+
202
+ ```json
203
+ {
204
+ "compilerOptions": {
205
+ "moduleResolution": "node",
206
+ "resolveJsonModule": true,
207
+ "esModuleInterop": true
208
+ }
209
+ }
210
+ ```
211
+
212
+ ## 更新步骤
213
+
214
+ 用户需要更新到最新版本:
215
+
216
+ ```bash
217
+ # 更新包
218
+ pnpm update meetfun-i18n
219
+
220
+ # 或指定版本
221
+ pnpm add meetfun-i18n@1.2.1
222
+
223
+ # 验证安装
224
+ ls node_modules/meetfun-i18n/vue2/
225
+ ```
226
+
227
+ ## 测试结果
228
+
229
+ 更新后,以下导入应该都能正常工作:
230
+
231
+ ```javascript
232
+ // ✅ 所有这些方式都应该能工作
233
+ import { createMeetFunI18n } from 'meetfun-i18n/vue2'
234
+ const { createMeetFunI18n } = require('meetfun-i18n/vue2')
235
+
236
+ // ✅ TypeScript 也能正确识别类型
237
+ import type { I18nConfig } from 'meetfun-i18n/vue2'
238
+ ```
239
+
240
+ ## 相关文档
241
+
242
+ - [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) - 故障排除完整指南
243
+ - [TEST_IMPORT.md](./TEST_IMPORT.md) - 导入测试说明
244
+ - [VUE2_USAGE.md](./VUE2_USAGE.md) - Vue2 使用指南
245
+
package/LICENSE CHANGED
@@ -1,22 +1,22 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 meetfun
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
22
-
1
+ MIT License
2
+
3
+ Copyright (c) 2025 meetfun
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+