You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Webpack无法解析cordova-plugin-ble-central模块问题求助

Capacitor项目引入cordova-plugin-ble-central时Webpack打包失败

我用Ionic Capacitor构建移动应用,尝试引入cordova-plugin-ble-central模块,已按Capacitor安装说明完成模块安装和源码同步,但Webpack打包JS文件时出现错误:Module not found: Error: Can't resolve 'cordova-plugin-ble-central' in '我的项目路径'

已尝试的排查步骤

  • 确认模块存在于node_modules文件夹中
  • 删除node_modules文件夹(rm -r node_modules)
  • 删除package-lock.json文件
  • 清除npm缓存(npm cache clean --force)
  • 重新安装所有node模块
  • 更换esbuild打包工具,仍出现相同错误

相关配置文件及错误信息

package.json

{
  "name": "capacitor-app",
  "version": "1.0.0",
  "description": "An Amazing Capacitor App",
  "main": "index.js",
  "keywords": [
    "capacitor",
    "mobile"
  ],
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "dependencies": {
    "@awesome-cordova-plugins/core": "^6.4.0",
    "@capacitor/camera": "latest",
    "@capacitor/core": "latest",
    "@capacitor/device": "^5.0.6",
    "@capacitor/splash-screen": "latest",
    "cordova-plugin-ble-central": "^1.7.1",
    "matchdep": "^2.0.0",
    "uglify": "^0.1.5",
    "uniq": "^1.0.1"
  },
  "devDependencies": {
    "@babel/cli": "^7.23.0",
    "@babel/core": "^7.23.0",
    "@babel/preset-env": "^7.22.20",
    "@capacitor/cli": "latest",
    "babel-cli": "^6.26.0",
    "babel-core": "^6.26.3",
    "babel-polyfill": "^6.26.0",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-stage-2": "^6.24.1",
    "babel-register": "^6.26.0",
    "babelify": "^10.0.0",
    "esbuild": "0.19.4",
    "grunt": "^1.6.1",
    "gulp": "^4.0.2",
    "gulp-connect": "^5.7.0",
    "vinyl-source-stream": "^2.0.0",
    "webpack-cli": "^5.1.4"
  },
  "author": "",
  "license": "ISC"
}

webpack.config.js

const path = require('path');
module.exports = {
  mode: "production",
  entry: "./src",
  output: {
    path: path.resolve(__dirname, "www/js/"),
    filename: "main.js"
  },
  resolve: {
    extensions: ['.js', '.jsx', '.ts', '.tsx', '.json', '.css', '.scss'],
    modules: ['src', 'node_modules'] // Assuming that your files are inside the src dir
}
};

待打包源码(简化版)

import '@capacitor/core';
import {
  Device
} from '@capacitor/device';
import {ble} from 'cordova-plugin-ble-central';

window.onload = start;

async function getDeviceInfo() {
    let info = await Device.getInfo();
    return info;
  };

function start() {
  getDeviceInfo().then(info => {
    document.body.innerHTML = JSON.stringify(info, null, 4);
  });
}

错误日志

Module not found: Error: Can't resolve 'cordova-plugin-ble-central' in 'C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\src'
resolve 'cordova-plugin-ble-central' in 'C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\src'
  Parsed request is a module
  using description file: C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\package.json (relative path: ./src)
    Field 'browser' doesn't contain a valid alias configuration
    resolve as module
      C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\src\src doesn't exist or is not a directory
      C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\src\node_modules doesn't exist or is not a directory
      looking for modules in C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\src
        single file module
          using description file: C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\package.json (relative path: ./src/cordova-plugin-ble-central)
            no extension
              Field 'browser' doesn't contain a valid alias configuration
              C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\src\cordova-plugin-ble-central doesn't exist
            .js
              Field 'browser' doesn't contain a valid alias configuration
              C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\src\cordova-plugin-ble-central.js doesn't exist
            .jsx
              Field 'browser' doesn't contain a valid alias configuration
              C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\src\cordova-plugin-ble-central.jsx doesn't exist
            .ts
              Field 'browser' doesn't contain a valid alias configuration
              C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\src\cordova-plugin-ble-central.ts doesn't exist
            .tsx
              Field 'browser' doesn't contain a valid alias configuration
              C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\src\cordova-plugin-ble-central.tsx doesn't exist
            .json
              Field 'browser' doesn't contain a valid alias configuration
              C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\src\cordova-plugin-ble-central.json doesn't exist
            .css
              Field 'browser' doesn't contain a valid alias configuration
              C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\src\cordova-plugin-ble-central.css doesn't exist
            .scss
              Field 'browser' doesn't contain a valid alias configuration
              C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\src\cordova-plugin-ble-central.scss doesn't exist
        C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\src\cordova-plugin-ble-central doesn't exist
      looking for modules in C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules
        single file module
          using description file: C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\package.json (relative path: ./node_modules/cordova-plugin-ble-central)
            no extension
              Field 'browser' doesn't contain a valid alias configuration
              C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central is not a file
            .js
              Field 'browser' doesn't contain a valid alias configuration
              C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central.js doesn't exist
            .jsx
              Field 'browser' doesn't contain a valid alias configuration
              C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central.jsx doesn't exist
            .ts
              Field 'browser' doesn't contain a valid alias configuration
              C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central.ts doesn't exist
            .tsx
              Field 'browser' doesn't contain a valid alias configuration
              C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central.tsx doesn't exist
            .json
              Field 'browser' doesn't contain a valid alias configuration
              C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central.json doesn't exist
            .css
              Field 'browser' doesn't contain a valid alias configuration
              C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central.css doesn't exist
            .scss
              Field 'browser' doesn't contain a valid alias configuration
              C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central.scss doesn't exist
        existing directory C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central
          using description file: C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central\package.json (relative path: .)
            using description file: C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\package.json (relative path: ./node_modules/cordova-plugin-ble-central)
              no extension
                Field 'browser' doesn't contain a valid alias configuration
                C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central is not a file
              .js
                Field 'browser' doesn't contain a valid alias configuration
                C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central.js doesn't exist
              .jsx
                Field 'browser' doesn't contain a valid alias configuration
                C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central.jsx doesn't exist
              .ts
                Field 'browser' doesn't contain a valid alias configuration
                C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central.ts doesn't exist
              .tsx
                Field 'browser' doesn't contain a valid alias configuration
                C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central.tsx doesn't exist
              .json
                Field 'browser' doesn't contain a valid alias configuration
                C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central.json doesn't exist
              .css
                Field 'browser' doesn't contain a valid alias configuration
                C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central.css doesn't exist
              .scss
                Field 'browser' doesn't contain a valid alias configuration
                C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central.scss doesn't exist
              as directory
                existing directory C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central
                  using description file: C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central\package.json (relative path: .)
                    using path: C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central\index
                      using description file: C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central\package.json (relative path: ./index)
                        no extension
                          Field 'browser' doesn't contain a valid alias configuration
                          C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central\index doesn't exist
                        .js
                          Field 'browser' doesn't contain a valid alias configuration
                          C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central\index.js doesn't exist
                        .jsx
                          Field 'browser' doesn't contain a valid alias configuration
                          C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central\index.jsx doesn't exist
                        .ts
                          Field 'browser' doesn't contain a valid alias configuration
                          C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central\index.ts doesn't exist
                        .tsx
                          Field 'browser' doesn't contain a valid alias configuration
                          C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central\index.tsx doesn't exist
                        .json
                          Field 'browser' doesn't contain a valid alias configuration
                          C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central\index.json doesn't exist
                        .css
                          Field 'browser' doesn't contain a valid alias configuration
                          C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central\index.css doesn't exist
                        .scss
                          Field 'browser' doesn't contain a valid alias configuration
                          C:\Users\kc\app-dev\mob_app_ble_l2cap_test\my-app\node_modules\cordova-plugin-ble-central\index.scss doesn't exist
      C:\Users\kc\app-dev\mob_app_ble_l2cap_test\src doesn't exist or is not a directory
      C:\Users\kc\app-dev\mob_app_ble_l2cap_test\node_modules doesn't exist or is not a directory
      C:\Users\kc\app-dev\src doesn't exist or is not a directory
      C:\Users\kc\app-dev\node_modules doesn't exist or is not a directory
      C:\Users\kc\src doesn't exist or is not a directory
      C:\Users\kc\node_modules doesn't exist or is not a directory
      C:\Users\src doesn't exist or is not a directory
      C:\Users\node_modules doesn't exist or is not a directory
      C:\src doesn't exist or is not a directory
      C:\node_modules doesn't exist or is not a directory

webpack 5.88.2 compiled with 1 error in 346 ms

解决方案

1. 使用@awesome-cordova-plugins/ble-central封装库

cordova-plugin-ble-central本身未提供ES模块规范的入口,直接import会导致打包工具无法解析。你已安装@awesome-cordova-plugins/core,可以安装对应的BLE封装库:

npm install @awesome-cordova-plugins/ble-central

修改源码中的导入语句:

import { BLE } from '@awesome-cordova-plugins/ble-central';

该封装库会正确处理Cordova插件的加载逻辑,适配Capacitor环境。

2. 配置Webpack别名(备选方案)

若不想使用封装库,可在webpack.config.js中添加别名,直接指向插件的JS文件:

resolve: {
  extensions: ['.js', '.jsx', '.ts', '.tsx', '.json', '.css', '.scss'],
  modules: ['src', 'node_modules'],
  alias: {
    'cordova-plugin-ble-central': path.resolve(__dirname, 'node_modules/cordova-plugin-ble-central/www/ble.js')
  }
}

同时修改源码导入方式(插件挂载在window对象上,无需解构):

import 'cordova-plugin-ble-central';
// 使用时直接调用window.ble
window.ble.scan([], 5, (device) => {
  // 处理扫描结果
}, (error) => {
  // 处理错误
});

3. 重新同步Capacitor插件

执行以下命令确保插件正确同步到原生项目:

npx cap sync

内容的提问来源于stack exchange,提问作者lukecam95

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:59:49