mirror of
https://github.com/NeteaseCloudMusicApiEnhanced/api-enhanced.git
synced 2026-02-04 04:43:10 +00:00
fix: add fallback for Node.js built-in modules in webpack config
This commit is contained in:
parent
d8ecb31f7b
commit
f25e752a04
14
main.js
14
main.js
@ -11,7 +11,19 @@ if (!fs.existsSync(anonymousTokenPath)) {
|
||||
/** @type {Record<string, any>} */
|
||||
let obj = {}
|
||||
|
||||
const modulePath = path.join(__dirname, 'module')
|
||||
// 当打包后运行时,__dirname会指向bundle.js的位置,需要回退到上级目录查找module
|
||||
// 检查当前目录下是否存在module文件夹,如果不存在则尝试在上级目录查找
|
||||
// 如果上级目录也不存在,抛出错误
|
||||
let modulePath = path.join(__dirname, 'module')
|
||||
if (!fs.existsSync(modulePath)) {
|
||||
modulePath = path.join(__dirname, '..', 'module')
|
||||
}
|
||||
if (!fs.existsSync(modulePath)) {
|
||||
throw new Error(
|
||||
`Module directory not found at ${path.join(__dirname, 'module')} or ${modulePath}`,
|
||||
)
|
||||
}
|
||||
|
||||
const moduleFiles = fs.readdirSync(modulePath).reverse()
|
||||
|
||||
let requestModule = null
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
# Webpack Bundle 使用说明
|
||||
|
||||
本项目已配置为使用 Webpack 构建单文件 bundle,放置在 `./precompiled` 目录下。
|
||||
本项目已配置为使用 Webpack 构建 bundle,放置在 `./precompiled` 目录下。
|
||||
|
||||
## 构建命令
|
||||
|
||||
@ -14,38 +14,46 @@ npm run build
|
||||
npm run build:prod
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
## 重要说明
|
||||
|
||||
由于本项目使用了动态模块加载(特别是 `./module` 目录下的 API 模块),完全的单文件打包会有一些限制:
|
||||
由于本项目设计上使用了动态模块加载(特别是 `./module` 目录下的 API 模块),使用 Webpack 打包存在技术限制:
|
||||
|
||||
1. Webpack 生成的 bundle 文件 (`precompiled/bundle.js`) 依赖于项目根目录的 `module` 文件夹来动态加载 API 模块
|
||||
2. 因此,部署时需要同时包含 `bundle.js` 和 `module` 文件夹
|
||||
3. 完整的部署结构应如下:
|
||||
```
|
||||
project/
|
||||
├── precompiled/
|
||||
│ └── bundle.js
|
||||
├── module/
|
||||
│ ├── album_detail.js
|
||||
│ ├── artist_album.js
|
||||
│ └── ... (所有API模块文件)
|
||||
├── node_modules/
|
||||
└── ... (其他依赖文件夹)
|
||||
1. **当前限制**:项目中的动态 require 语句(如 `require(filePath)`,其中 filePath 是变量)在 Webpack 打包时难以完全处理。
|
||||
2. **部署要求**:要运行 `precompiled/bundle.js`,必须保持原始项目结构,包括 `module`、`util` 等文件夹。
|
||||
3. **推荐方案**:对于真正的单文件部署,建议使用项目自带的 pkg 配置:
|
||||
```bash
|
||||
npm run pkgwin # Windows
|
||||
npm run pkglinux # Linux
|
||||
npm run pkgmacos # macOS
|
||||
```
|
||||
|
||||
## 运行
|
||||
## 完整部署结构
|
||||
|
||||
如果要使用 Webpack bundle,需要保留的文件夹:
|
||||
```
|
||||
project/
|
||||
├── precompiled/
|
||||
│ └── bundle.js
|
||||
├── module/ # API 模块
|
||||
├── util/ # 工具函数
|
||||
├── public/ # 静态资源
|
||||
├── data/ # 数据文件
|
||||
├── node_modules/ # 依赖包
|
||||
└── ... (其他文件夹)
|
||||
```
|
||||
|
||||
## 运行(需要完整项目结构)
|
||||
|
||||
```bash
|
||||
node precompiled/bundle.js
|
||||
```
|
||||
|
||||
## 替代方案
|
||||
## 推荐的部署方式
|
||||
|
||||
如果您需要真正的单文件部署,可以考虑使用项目中已有的 pkg 配置:
|
||||
对于生产环境,我们推荐使用 pkg 构建的单文件:
|
||||
```bash
|
||||
npm run pkgwin # Windows
|
||||
npm run pkglinux # Linux
|
||||
npm run pkgmacos # macOS
|
||||
npm run pkgwin
|
||||
# 生成的可执行文件位于 bin/app.exe
|
||||
```
|
||||
|
||||
这些命令会创建真正的单文件可执行程序,其中包含了所有必要的依赖。
|
||||
这种方式会创建完全自包含的可执行文件,不需要额外的模块文件夹。
|
||||
File diff suppressed because one or more lines are too long
@ -10,6 +10,25 @@ module.exports = {
|
||||
},
|
||||
resolve: {
|
||||
extensions: ['.js', '.json'],
|
||||
// 为 Node.js 内置模块提供 fallback
|
||||
fallback: {
|
||||
"fs": false,
|
||||
"path": false,
|
||||
"os": false,
|
||||
"crypto": false,
|
||||
"url": false,
|
||||
"querystring": false,
|
||||
"http": false,
|
||||
"https": false,
|
||||
"zlib": false,
|
||||
"stream": false,
|
||||
"util": false,
|
||||
"buffer": false,
|
||||
"events": false,
|
||||
"string_decoder": false,
|
||||
"process": false,
|
||||
"console": false
|
||||
}
|
||||
},
|
||||
// 排除所有node_modules中的依赖,因为它们在运行时会被require
|
||||
externals: [
|
||||
@ -59,8 +78,8 @@ module.exports = {
|
||||
// 为动态模块提供上下文
|
||||
plugins: [
|
||||
new (require('webpack')).ContextReplacementPlugin(
|
||||
/util[\/\\]request/, // 针对request模块路径
|
||||
path.resolve(__dirname)
|
||||
/main\.js$/, // 针对main.js中的动态require
|
||||
path.resolve(__dirname, 'module')
|
||||
)
|
||||
],
|
||||
// 避免对Node.js内置模块的警告
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user