把 web 项目 改成 Electron 项目


把 web 项目 改成 Electron 项目

返回目录

  1. 安装 Electron
    npm i -D electron@latest
    
  2. 修改 webpack.config.js
    //...
    module.exports = {
      target: "electron-renderer", //改成用 electron 渲染
      //...省略
      devServer: {
        // open: 'Google Chrome', //设置不启动浏览器
      }
    }
    
  3. package.json
    {
      //...省略
      "homepage": ".", //设置资源相对路径
      "scripts": {
        "start": "cross-env NODE_ENV=development webpack-dev-server", //启动 web 项目
        "exe": "cross-env NODE_ENV=development electron ." //运行 electron
      },
      //...省略
    }
    
  4. main.js
    const { app, BrowserWindow } = require('electron')
    const path = require('path');
    const url = require('url');
    
    function createWindow() {
      // 创建浏览器窗口
      let win = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
          nodeIntegration: true
        }
      })
    
      const startUrl = process.env.NODE_ENV === 'development'
        ? 'http://localhost:3000'
        : path.join(__dirname, "/build/index.html");
    
      win.loadURL(startUrl)
      // 加载 index.html 文件
      // win.loadFile('./dist/index.html')
    
      // 打开开发者工具
      win.webContents.openDevTools()
    }
    
    // Electron会在初始化完成并且准备好创建浏览器窗口时调用这个方法
    // 部分 API 在 ready 事件触发后才能使用。
    app.whenReady().then(createWindow)
    
    //当所有窗口都被关闭后退出
    app.on('window-all-closed', () => {
      // 在 macOS 上,除非用户用 Cmd + Q 确定地退出,
      // 否则绝大部分应用及其菜单栏会保持激活。
      if (process.platform !== 'darwin') {
        app.quit()
      }
    })
    
    app.on('activate', () => {
      // 在macOS上,当单击dock图标并且没有其他窗口打开时,
      // 通常在应用程序中重新创建一个窗口。
      if (BrowserWindow.getAllWindows().length === 0) {
        createWindow()
      }
    })
    
    // 您可以把应用程序其他的流程写在在此文件中
    // 代码 也可以拆分成几个文件,然后用 require 导入。
    
  5. 在一个终端中运行 npm start来启动 web 服务,
    在另一个终端中执行 npm run exe来启动 Electron。

打包

  1. 安装 electron-builder
    npm i -D electron-builder
    
  2. 配置 package.json
### 正确加载静态 PDF 文件的方法 在前端项目中加载静态 PDF 文件时,通常会遇到跨域请求被阻止(CORS Policy)、路径配置不正确等问题。以下是详细的分析和解决方案。 #### 1. 解决跨域问题 当尝试通过 `vue-pdf` 或其他库加载远程 PDF 文件时,可能会因为 CORS 策略而收到错误提示:“has been blocked by CORS policy”。这是因为服务器未允许来自当前域名的请求[^1]。 为了规避此问题,可以采取以下措施之一: - **本地托管 PDF 文件**:将 PDF 文件放置于项目的静态资源目录下(如 `public/` 或 `src/assets/pdf/`),并通过相对路径引用它。 - **修改服务器端设置**:如果必须从外部 URL 加载 PDF,则需联系服务器管理员,在响应头中添加必要的 CORS 配置,例如: ```http Access-Control-Allow-Origin: * ``` #### 2. 设置正确的文件路径 确保 PDF 文件已存入合适的位置并能被正常访问。对于 Vue 项目而言,推荐的做法是将其放入 `public/` 或 `src/assets/` 目录中[^2][^3]。 - 如果使用的是 `public/` 文件夹,可以直接通过 `/pdf/filename.pdf` 的方式访问; - 若存储在 `src/assets/` 下,则需要构建工具处理后再动态导入。 示例代码如下: ```javascript import { createPdf } from 'vue-pdf'; // 假设 PDF 存储位置为 public/pdfs/example.pdf const pdfUrl = '/pdfs/example.pdf'; createPdf(pdfUrl).then((pdf) => { console.log('PDF loaded successfully', pdf); }); ``` #### 3. 利用 UniApp 内置功能管理静态资源 如果是基于 UniApp 构建的应用程序,还可以利用其内置机制来管理和分发静态资源。这有助于简化开发流程,并减少因路径不当引发的问题。 --- ### 常见报错原因及其应对策略 | 报错描述 | 可能的原因 | 推荐方案 | |----------|-------------|-----------| | Failed to load resource: the server responded with a status of 404 (Not Found) | 路径拼写有误或者目标文件不存在 | 检查实际存放地址是否匹配;确认打包阶段该文件已被复制到最终输出目录 | | Cross-origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https. | 尝试直接读取本地磁盘上的文件而非经过 HTTP 协议传输 | 改成经由 Web Server 提供服务的形式 | | Cannot find module 'electron' or its corresponding type declarations.[^4] | 缺少必要依赖项 | 执行命令重新安装缺失模块:<br>`npm install electron --save-dev` | --- ### 总结 综上所述,要成功加载静态 PDF 文件至前端应用,需要注意以下几个方面: - 合理规划文件结构,优先考虑将 PDF 文档置于可公开访问区域; - 对抗潜在的安全限制——比如调整后端 API 权限或是切换为内部链接调用模式; - 定期审查整个工程环境状态,及时更新所需插件版本号以维持兼容性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值