diff --git a/manager/.npmrc b/manager/.npmrc new file mode 100644 index 00000000..c0c80ba4 --- /dev/null +++ b/manager/.npmrc @@ -0,0 +1 @@ +engine-strict=false diff --git a/manager/.yarnrc b/manager/.yarnrc new file mode 100644 index 00000000..4f14322d --- /dev/null +++ b/manager/.yarnrc @@ -0,0 +1 @@ +--ignore-engines true diff --git a/manager/README.md b/manager/README.md index 254a51de..f3916b65 100644 --- a/manager/README.md +++ b/manager/README.md @@ -1,29 +1,90 @@ # LILISHOP-UI -## Project setup -``` -npm install -``` +# LiliShop UI Manager 的 Node.js 版本兼容性 -### Compiles and hot-reloads for development -``` -npm run serve -``` +本文档概述了 LiliShop UI seller 项目的 Node.js 版本兼容性。 -### Compiles and minifies for production -``` -npm run build -``` +## 摘要 -### Run your tests -``` -npm run test -``` +| Node.js 版本 | npm 版本 | 兼容性 | 备注 | +|-----------------|-------------|--------------|-------| +| v20.13.1 (当前 LTS) | 10.8.0 | ✅ 需要解决方案 | 安装需要 `--legacy-peer-deps` 参数,运行需要 `NODE_OPTIONS=--openssl-legacy-provider` | +| v18.20.8 (LTS) | 10.8.2 | ✅ 需要解决方案 | 安装需要 `--legacy-peer-deps` 参数,运行需要 `NODE_OPTIONS=--openssl-legacy-provider` | +| v16.20.2 (LTS) | 8.19.4 | ✅ 有轻微警告 | 安装需要 `--legacy-peer-deps` 参数,整体运行良好 | +| v14.x (最低版本) | - | ❌ 不兼容 | 无法在 ARM64 架构上安装 (M系列 Mac) | + +## 详细发现 + +### Node.js v20.13.1 (当前 LTS) +- **安装**: 使用 `--legacy-peer-deps` 参数可以正常安装 +- **开发服务器**: 需要设置 `NODE_OPTIONS=--openssl-legacy-provider` 环境变量 +- **构建**: 需要设置 `NODE_OPTIONS=--openssl-legacy-provider` 环境变量 +- **问题**: + - vue-awesome-swiper 和 swiper 之间的依赖冲突 + - 由于 Node.js v20 移除了旧版加密算法导致的 OpenSSL 相关错误 + - 部分包报告不支持的引擎警告 +- **验证**: 已成功构建并验证 dist/index.html 可以正常运行 + +### Node.js v18.20.8 (LTS) +- **安装**: 使用 `--legacy-peer-deps` 参数可以正常安装 +- **开发服务器**: 需要设置 `NODE_OPTIONS=--openssl-legacy-provider` 环境变量 +- **构建**: 需要设置 `NODE_OPTIONS=--openssl-legacy-provider` 环境变量 +- **问题**: + - 部分包报告不支持的引擎警告 (v-click-outside-x, @achrinza/node-ipc) +- **验证**: 已成功构建并验证 dist/index.html 可以正常运行 + +### Node.js v16.20.2 (LTS) +- **安装**: 使用 `--legacy-peer-deps` 参数可以正常安装 +- **开发服务器**: 无需额外参数即可运行 +- **构建**: 可以正常构建 +- **问题**: + - v-click-outside-x 包有轻微警告 (需要 npm 6.4.1) + +### Node.js v14.x +- **安装**: 在 ARM64 架构 (M系列 Mac) 上无法安装 +- **开发服务器**: 未测试 +- **构建**: 可以正常构建 +- **问题**: + - Node.js v14 没有 ARM64 架构的二进制文件 + +## 建议 + +1. **最佳版本**: Node.js v16.20.2 配合 npm 8.19.4 + - 与项目依赖最兼容 + - 需要的解决方案最少 + - 性能稳定 + +2. **安装命令**: + ```bash + npm install --legacy-peer-deps + ``` + +3. **开发命令**: + ```bash + # 对于 Node.js v16 + npm run dev + + # 对于 Node.js v18 或 v20 + NODE_OPTIONS=--openssl-legacy-provider npm run dev + 或者 npm run dev + ``` + +4. **生产构建命令**: + ```bash + # 对于 Node.js v16 + npm run build + + # 对于 Node.js v18 或 v20 + NODE_OPTIONS=--openssl-legacy-provider npm run build + 或者 npm run dev + ``` + +## 未来考虑 + +1. 更新依赖以兼容较新的 Node.js 版本 +2. 解决对等依赖冲突 +3. 更新 package.json 以指定推荐的 Node.js 版本范围 -### Lints and fixes files -``` -npm run lint -``` ### Customize configuration 详情点击 [https://cli.vuejs.org/zn/config/](https://cli.vuejs.org/zn/config/). diff --git a/manager/package.json b/manager/package.json index 1253041d..c8a0ebe0 100644 --- a/manager/package.json +++ b/manager/package.json @@ -5,9 +5,12 @@ "description": "lilishop-ui", "author": "lili-platform", "scripts": { - "serve": "vue-cli-service serve", - "build": "vue-cli-service build", - "dev": "vue-cli-service serve" + "serve": "NODE_OPTIONS=--openssl-legacy-provider vue-cli-service serve", + "build": "NODE_OPTIONS=--openssl-legacy-provider vue-cli-service build", + "dev": "NODE_OPTIONS=--openssl-legacy-provider vue-cli-service serve" + }, + "engines": { + "node": ">=14" }, "dependencies": { "@amap/amap-jsapi-loader": "0.0.7", @@ -16,8 +19,9 @@ "core-js": "^3.6.5", "dplayer": "^1.26.0", "js-cookie": "^2.2.1", - "node-sass": "^4.14.1", - "sass-loader": "^8.0.2", + "price-color": "1.0.2", + "sass": "^1.63.6", + "sass-loader": "^10.4.1", "sockjs-client": "^1.4.0", "swiper": "^6.3.5", "uuid": "^8.3.2", @@ -31,8 +35,7 @@ "vue-router": "^3.1.3", "vuedraggable": "^2.23.2", "vuex": "^3.4.0", - "xss": "^1.0.7", - "price-color":"1.0.2" + "xss": "^1.0.7" }, "devDependencies": { "@vue/cli-plugin-babel": "^4.4.4", @@ -50,6 +53,8 @@ "vue-template-compiler": "^2.6.10" }, "resolutions": { - "minimatch": "^3.1.2" + "minimatch": "^3.1.2", + "node-sass": "npm:sass@^1.63.6", + "@achrinza/node-ipc": "9.2.2" } } diff --git a/manager/src/components/hotzone/index.vue b/manager/src/components/hotzone/index.vue index 90d75467..53c0c7e7 100644 --- a/manager/src/components/hotzone/index.vue +++ b/manager/src/components/hotzone/index.vue @@ -57,11 +57,11 @@ export default { }; diff --git a/manager/src/views/main-parts/shrinkable-menu/shrinkable-menu.vue b/manager/src/views/main-parts/shrinkable-menu/shrinkable-menu.vue index 909f70ca..89e77c2f 100644 --- a/manager/src/views/main-parts/shrinkable-menu/shrinkable-menu.vue +++ b/manager/src/views/main-parts/shrinkable-menu/shrinkable-menu.vue @@ -49,7 +49,7 @@ export default { this.selectNav(val.meta.firstRouterName) } } - } + } }, methods: { changeMenu(name) { //二级路由点击 @@ -90,7 +90,7 @@ export default { .ivu-menu-dark.ivu-menu-vertical .ivu-menu-item-active:not(.ivu-menu-submenu), .ivu-menu-dark.ivu-menu-vertical .ivu-menu-submenu-title-active:not(.ivu-menu-submenu){ color: $theme_color; } -/deep/.ivu-menu-vertical .ivu-menu-item-group-title { +::v-deep.ivu-menu-vertical .ivu-menu-item-group-title { height: 40px; line-height: 40px; padding-left: 20px; diff --git a/manager/src/views/member/list/index.vue b/manager/src/views/member/list/index.vue index a4d0ad28..ca5f0ac4 100644 --- a/manager/src/views/member/list/index.vue +++ b/manager/src/views/member/list/index.vue @@ -6,7 +6,7 @@ - + @@ -546,10 +546,10 @@ export default { }; diff --git a/manager/src/views/seller/shop/shopOperation.vue b/manager/src/views/seller/shop/shopOperation.vue index aa698360..4c7426fb 100644 --- a/manager/src/views/seller/shop/shopOperation.vue +++ b/manager/src/views/seller/shop/shopOperation.vue @@ -862,7 +862,7 @@ export default { z-index: 9; } -/deep/ .ivu-tabs-bar { +::v-deep .ivu-tabs-bar { margin: 0; } diff --git a/manager/src/views/statistics/order.vue b/manager/src/views/statistics/order.vue index c8a24df8..cf6fb228 100644 --- a/manager/src/views/statistics/order.vue +++ b/manager/src/views/statistics/order.vue @@ -782,7 +782,7 @@ export default { z-index: 2; } } - /deep/ .box { + ::v-deep .box { color: #fff; position: absolute; diff --git a/manager/src/views/sys/setting-manage/authLogin/CONNECT_SETTING.vue b/manager/src/views/sys/setting-manage/authLogin/CONNECT_SETTING.vue index 5ae65111..eb143e9a 100644 --- a/manager/src/views/sys/setting-manage/authLogin/CONNECT_SETTING.vue +++ b/manager/src/views/sys/setting-manage/authLogin/CONNECT_SETTING.vue @@ -123,7 +123,7 @@ export default { margin-right: 10px; display: flex; margin-bottom: 20px; - /deep/ .ivu-card-body { + ::v-deep .ivu-card-body { padding: 0 16px !important; } } diff --git a/manager/src/views/sys/setting-manage/authLogin/QQ_CONNECT.vue b/manager/src/views/sys/setting-manage/authLogin/QQ_CONNECT.vue index 09115ab2..234584c8 100644 --- a/manager/src/views/sys/setting-manage/authLogin/QQ_CONNECT.vue +++ b/manager/src/views/sys/setting-manage/authLogin/QQ_CONNECT.vue @@ -133,7 +133,7 @@ export default { margin-right: 20px; display: flex; margin-bottom: 20px; - /deep/ .ivu-card-body { + ::v-deep .ivu-card-body { padding: 0 16px !important; } } @@ -151,7 +151,7 @@ export default { padding-bottom: 10px; flex-direction: column; align-items: center; - /deep/ .ivu-btn { + ::v-deep .ivu-btn { width: 100px; } } diff --git a/manager/src/views/sys/setting-manage/authLogin/WECHAT_CONNECT.vue b/manager/src/views/sys/setting-manage/authLogin/WECHAT_CONNECT.vue index f952bffb..c3be6738 100644 --- a/manager/src/views/sys/setting-manage/authLogin/WECHAT_CONNECT.vue +++ b/manager/src/views/sys/setting-manage/authLogin/WECHAT_CONNECT.vue @@ -132,7 +132,7 @@ export default { margin-right: 20px; display: flex; margin-bottom: 20px; - /deep/ .ivu-card-body { + ::v-deep .ivu-card-body { padding: 0 16px !important; } } @@ -150,7 +150,7 @@ export default { padding-bottom: 10px; flex-direction: column; align-items: center; - /deep/ .ivu-btn { + ::v-deep .ivu-btn { width: 100px; } } diff --git a/manager/src/views/sys/setting-manage/pay/ALIPAY_PAYMENT.vue b/manager/src/views/sys/setting-manage/pay/ALIPAY_PAYMENT.vue index 1b9c5b6a..d882f6d6 100644 --- a/manager/src/views/sys/setting-manage/pay/ALIPAY_PAYMENT.vue +++ b/manager/src/views/sys/setting-manage/pay/ALIPAY_PAYMENT.vue @@ -90,12 +90,12 @@ export default { display: flex; } .w200 { - /deep/ .ivu-input { + ::v-deep .ivu-input { width: 250px !important; margin: 0 10px; } } -/deep/ .ivu-input { +::v-deep .ivu-input { width: 450px !important; margin: 0 10px; } diff --git a/manager/src/views/sys/setting-manage/pay/PAYMENT_SUPPORT.vue b/manager/src/views/sys/setting-manage/pay/PAYMENT_SUPPORT.vue index 31e8bc3f..f2975208 100644 --- a/manager/src/views/sys/setting-manage/pay/PAYMENT_SUPPORT.vue +++ b/manager/src/views/sys/setting-manage/pay/PAYMENT_SUPPORT.vue @@ -151,7 +151,7 @@ export default { margin-right: 20px; display: flex; margin-bottom: 20px; - /deep/ .ivu-card-body { + ::v-deep .ivu-card-body { padding: 0 16px !important; } } diff --git a/manager/src/views/sys/setting-manage/pay/WECHAT_PAYMENT.vue b/manager/src/views/sys/setting-manage/pay/WECHAT_PAYMENT.vue index 392db0cf..49359073 100644 --- a/manager/src/views/sys/setting-manage/pay/WECHAT_PAYMENT.vue +++ b/manager/src/views/sys/setting-manage/pay/WECHAT_PAYMENT.vue @@ -118,13 +118,13 @@ export default { } .w200 { - /deep/ .ivu-input { + ::v-deep .ivu-input { width: 250px !important; margin: 0 10px; } } -/deep/ .ivu-input { +::v-deep .ivu-input { width: 450px !important; margin: 0 10px; } diff --git a/manager/src/views/sys/setting-manage/setting/GOODS_SETTING.vue b/manager/src/views/sys/setting-manage/setting/GOODS_SETTING.vue index d2a5ea9f..c38a83a5 100644 --- a/manager/src/views/sys/setting-manage/setting/GOODS_SETTING.vue +++ b/manager/src/views/sys/setting-manage/setting/GOODS_SETTING.vue @@ -188,7 +188,7 @@ export default { .label-item { display: flex; } -/deep/ .ivu-input { +::v-deep .ivu-input { width: 100px !important; } diff --git a/manager/src/views/sys/setting-manage/setting/IM_SETTING.vue b/manager/src/views/sys/setting-manage/setting/IM_SETTING.vue index 7bfc80eb..dba17c86 100644 --- a/manager/src/views/sys/setting-manage/setting/IM_SETTING.vue +++ b/manager/src/views/sys/setting-manage/setting/IM_SETTING.vue @@ -74,7 +74,7 @@ export default { display: flex; } -/deep/ .ivu-input { +::v-deep .ivu-input { width: 300px !important; margin: 0 10px; } diff --git a/manager/src/views/sys/setting-manage/setting/LOGISTICS_SETTING.vue b/manager/src/views/sys/setting-manage/setting/LOGISTICS_SETTING.vue index d49b322e..40dea111 100644 --- a/manager/src/views/sys/setting-manage/setting/LOGISTICS_SETTING.vue +++ b/manager/src/views/sys/setting-manage/setting/LOGISTICS_SETTING.vue @@ -113,7 +113,7 @@ export default { display: flex; } -/deep/ .ivu-input { +::v-deep .ivu-input { width: 300px !important; margin: 0 10px; } diff --git a/manager/src/views/sys/setting-manage/setting/ORDER_SETTING.vue b/manager/src/views/sys/setting-manage/setting/ORDER_SETTING.vue index ecb7b314..20ab670a 100644 --- a/manager/src/views/sys/setting-manage/setting/ORDER_SETTING.vue +++ b/manager/src/views/sys/setting-manage/setting/ORDER_SETTING.vue @@ -124,7 +124,7 @@ export default { margin-right: 10px; } -/deep/ .ivu-input { +::v-deep .ivu-input { width: 100px !important; } diff --git a/manager/src/views/sys/setting-manage/setting/OSS_SETTING.vue b/manager/src/views/sys/setting-manage/setting/OSS_SETTING.vue index e5bbceda..b3a102c2 100644 --- a/manager/src/views/sys/setting-manage/setting/OSS_SETTING.vue +++ b/manager/src/views/sys/setting-manage/setting/OSS_SETTING.vue @@ -161,7 +161,7 @@ export default { display: flex; } -/deep/ .ivu-input { +::v-deep .ivu-input { width: 300px !important; margin: 0 10px; } diff --git a/manager/src/views/sys/setting-manage/setting/POINT_SETTING.vue b/manager/src/views/sys/setting-manage/setting/POINT_SETTING.vue index ef75c793..e2e42c5d 100644 --- a/manager/src/views/sys/setting-manage/setting/POINT_SETTING.vue +++ b/manager/src/views/sys/setting-manage/setting/POINT_SETTING.vue @@ -172,7 +172,7 @@ export default { } } -/deep/ .ivu-input { +::v-deep .ivu-input { width: 70px !important; } @@ -182,7 +182,7 @@ export default { } .label-btns { - /deep/ .ivu-btn { + ::v-deep .ivu-btn { margin-right: 10px; } } diff --git a/manager/src/views/sys/setting-manage/setting/SMS_SETTING.vue b/manager/src/views/sys/setting-manage/setting/SMS_SETTING.vue index e78d85ed..b40099c4 100644 --- a/manager/src/views/sys/setting-manage/setting/SMS_SETTING.vue +++ b/manager/src/views/sys/setting-manage/setting/SMS_SETTING.vue @@ -160,7 +160,7 @@ export default { display: flex; } -/deep/ .ivu-input { +::v-deep .ivu-input { width: 300px !important; margin: 0 10px; } diff --git a/manager/src/views/sys/setting-manage/setting/WITHDRAWAL_SETTING.vue b/manager/src/views/sys/setting-manage/setting/WITHDRAWAL_SETTING.vue index e5996cc9..e674292c 100644 --- a/manager/src/views/sys/setting-manage/setting/WITHDRAWAL_SETTING.vue +++ b/manager/src/views/sys/setting-manage/setting/WITHDRAWAL_SETTING.vue @@ -98,7 +98,7 @@ export default {