vue3项目中用codemirror实现格式化java代码及不太成熟的历程

news2024/9/28 7:18:00

本期只介绍创作的曲折历程,并不能解决实际问题,现有插件不支持,总结在了最后

一、案例效果

vue3项目使用preitter 搭配prettier-plugin-java 实现codemirror 格式化 java

二、步骤

1. 安装prettier和prettier-plugin-java,可以通过npm或yarn进行安装:
npm install --save-dev prettier prettier-plugin-java
yarn add --dev prettier prettier-plugin-java
2. 在你的项目中,你可以创建一个prettier的配置文件.prettierrc.js,并在其中添加如下配置
module.exports = {
  plugins: ["prettier-plugin-java"],
};
3. codemirror组件中使用prettier来格式化你的Java代码
import prettier from "prettier";
import javaPlugin from "prettier-plugin-java";

formatJavaCode(code) {
  const formattedCode = prettier.format(code, {
    parser: "java",
    plugins: [javaPlugin],
  });
  return formattedCode;
}

在你的codemirror组件中,你可以使用这个方法来格式化你的Java代码,例如:

this.code = this.formatJavaCode(this.code);

三、踩坑场景

1. 报错 process is not defined

在这里插入图片描述
这个问题是由于在浏览器环境中,process对象是不存在的,而prettier-plugin-java在某些地方使用了process对象,导致了这个错误。

解决这个问题的一种方法是在你的webpack配置中添加一个插件,来定义process对象。你可以使用webpack.DefinePlugin来实现这个功能:

const webpack = require('webpack');

module.exports = {
  // ...
  plugins: [
    new webpack.DefinePlugin({
      'process.env': {
        NODE_ENV: JSON.stringify(process.env.NODE_ENV),
      },
      process: 'process/browser',
    }),
  ],
  // ...
};

这样,process对象就会被定义为process/browser,从而避免了ReferenceError: process is not defined这个错误。

另外,你也可以尝试使用prettier-plugin-java的最新版本,看看是否已经修复了这个问题。

2. 报错 browser is not defined

在这里插入图片描述
这个错误是因为process/browser被解析为process对象的browser属性,但是browser并没有被定义,所以会报错。

在webpack中定义process对象,应该使用DefinePlugin插件,将process对象的env属性设置为一个包含环境变量的对象,而不是直接将process设置为’process/browser’。

你可以修改你的webpack配置如下:

const webpack = require('webpack');

module.exports = {
  configureWebpack: {
    plugins: [
      new webpack.DefinePlugin({
        'process.env': JSON.stringify(process.env),
      }),
    ],
  },
};

这样,process.env就会被设置为一个包含所有环境变量的对象,你就可以在你的代码中使用process.env来访问环境变量了。

3. 报错 process is not defined

在这里插入图片描述
这个问题是由于在浏览器环境中,process对象是不存在的,而prettier-plugin-java在某些地方使用了process对象,导致了这个错误。

在 Vue CLI 项目中,你可以在vue.config.js文件中的configureWebpack或chainWebpack配置项中添加以下内容,来为前端代码注入process变量:

const webpack = require('webpack');

module.exports = {
  configureWebpack: {
    plugins: [
      new webpack.ProvidePlugin({
        process: 'process/browser',
      }),
    ],
  },
};

这里使用了webpack.ProvidePlugin插件,它可以将模块作为一个变量,被 webpack 在其他每个模块中引用。这样就可以在任何地方使用process变量了。

然后,你需要安装process这个npm包:

npm install --save process

这个包提供了一个全局对象,用于访问,例如,环境变量等信息。

四、安装包版本

 "prettier": "2.3.1",
 "prettier-plugin-java": "^1.6.0",
 "java-parser": "^2.0.2",
 "process": "^0.11.10",

五、写在最后

这个历程有点艰难,主要是从prettier 官网好不容易找到了能够格式化java的插件,结果弄了一遭还不能用,此文章是为了记录创作历程,呈曲折式呈现

官网地址: https://prettier.io/docs/en/plugins.html
在这里插入图片描述

结论: 这个preitter 版本和prettier-plugin-java 的版本不统一,所以即使能编译解析java语言,但做不到格式化,因为prettier-plugin-java 最新版本是1.6.0,要求的prettier是2.3.1,而prettier现在已经达到了3.x版本。 preitter 2.3.1的版本会存在一些bug

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1410006.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何快速解决局域网IP冲突问题?连接IP地址冲突如何用代理IP搞定?

随着互联网的普及,局域网已经成为了许多家庭和企业中不可或缺的一部分。然而,局域网中的IP地址冲突问题却时常困扰着用户。一旦出现IP地址冲突,网络连接就会变得不稳定,甚至无法正常上网。那么,如何快速解决局域网IP冲…

2024 高级前端面试题之 HTML 「精选篇」

该内容主要整理关于 HTML 的相关面试题,其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 HTML模块精选篇 1. 如何理解HTML语义化2. H5的新特性有哪些3. 说一下 HTML5 Drag API4. iframe有那些缺点5. 如何实现浏览器内多个标签页之间的通信6. 简述一下s…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第二天-ARM汇编(物联技术666)

链接:https://pan.baidu.com/s/1bG0tuVaACATvjLwD05j1FQ?pwd1688 提取码:1688 上午:ARM编程模型 下午:常用ARM指令 教学内容: 1、ARM数据类型 字节(Byte):在ARM体系结构及常见的…

掌握大语言模型技术: 推理优化

掌握大语言模型技术_推理优化 堆叠 Transformer 层来创建大型模型可以带来更好的准确性、少样本学习能力,甚至在各种语言任务上具有接近人类的涌现能力。 这些基础模型的训练成本很高,并且在推理过程中可能会占用大量内存和计算资源(经常性成…

数据结构(队列)

一.什么是队列 1.队列定义 队列是一种特殊的线性表,特殊之处在于他只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。和栈一样,队列也是一种操作受限制的线性表。进行插入操作的一端称为队尾,进行删除操作的…

微服务理解篇

一 :架构演变 1 单体架构: 简单理解为一个服务涵盖所有需求功能2 垂直架构: 按照业务功能将单体架构拆分成小模块服务, 如:订单系统,用户系统,商品系统 ##缺点 引入分布式事务,分布式锁等,优点:模块解耦## 垂直拆分:根据业务层级拆分,比如商城的订单系统,用户系统,商品系统…

搭建属于自己本地的网站

1.关闭selinux 1.1 为什么关闭? 如果selinux不关闭的话,修改ssh端口等策略会不生效, 比如向将ssh端口修改为22011,修改后重启sshd服务,端口未修改,此时需要执行setendforce 0 命令,然后再次重…

leetcode hot100组合

在本题中,是要求返回[1,n]这个数组的长度为k的组合。涉及到排列、组合、棋盘、分割等问题的时候,要考虑利用回溯来进行解决。 回溯和递归类似,也分为三步进行分析 确定递归函数的返回值和参数:一般来说返回值都是void&#xff0c…

【前端web入门第一天】02 HTML图片标签 超链接标签

文章目录: 1.HTML图片标签 1.1 图像标签-基本使用1.2 图像标签-属性1.3 路径 1.3.1 相对路径 1.3.2 绝对路径 2.超链接标签 3.音频标签 4.视频标签 1.HTML图片标签 1.1 图像标签-基本使用 作用:在网页中插入图片。 <img src"图片的URL">src用于指定图像…

【2024】新建mysql数据库,如何选择字符集和排序规则

如何使用 Navicat 新建 MySQL 数据库&#xff0c;并选择字符集与排序规则 如何使用 Navicat 新建 MySQL 数据库并选择字符集与排序规则1. 开始之前2. 新建数据库步骤 1: 打开 Navicat步骤 2: 创建新数据库步骤 3: 填写数据库名称 常见的字符集和排序规则及其选择场景1. 字符集&…

使用__missing__方法实现映射表多格式主键

背景介绍 在python中&#xff0c;我们经常使用字典类型实现映射表的功能&#xff0c;通过字典的主键遍历获取对应的值&#xff0c;从而实现从一个值映射到另一个值的功能 但是这种映射是十分硬性的&#xff0c;例如&#xff0c;假如我的映射表为{‘1’&#xff1a;one&#x…

串口控制器

1. 串口通信 1.1 什么是串口 是一种通信方式&#xff08;通信协议&#xff09; 主要通过串行方式完成设备间的数据通信 通信领域中使用最频繁&#xff0c;实现方式最简单的一种通信方式 串口: 全双工串行异步通信协议 串口3线: RX 接收 TX 发送 GND 共地信号 参考地 …

纳斯达克VS路透社MIFI大屏直投-大舍传媒

纳斯达克VS路透社MIFI大屏直投-大舍传媒 引言 在数字时代的今天&#xff0c;大屏投放成为一种广泛应用的营销手段和传媒方式。纳斯达克大屏和路透社MIFI大屏作为两个重要的投放平台&#xff0c;为企业和机构提供了广告和宣传的机会。 纳斯达克大屏的魅力 纳斯达克大屏位于纽…

Web网页生成桌面应用

前言&#xff1a;网页生成桌面指的是将一个网页保存为桌面应用程序的形式&#xff0c;使得用户可以在桌面上直接打开该网页&#xff0c;而不必通过浏览器打开。这种桌面应用程序一般具有独立的窗口、菜单、工具栏等界面元素&#xff0c;能够提供更加方便快捷的使用体验。 实现…

基于Java的学生宿舍门禁信息管理系统的设计与实现(源码+lw+部署文档+讲解等

目录 前言 详细视频演示 具体实现截图 技术栈 后端框架SpringBoot 前端框架Vue 持久层框架MyBaitsPlus 系统测试 系统测试目的 系统功能测试 系统测试结论 代码参考 数据库代码参考 源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、…

(2024,MLLM,扩散,中文数据集扩散预训练,多模态提示引导微调)UNIMO-G:通过多模态条件扩散进行统一图像生成

UNIMO-G: Unified Image Generation through Multimodal Conditional Diffusion 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 1. 摘要 2. 方法 3. 结果 1. 摘要 现有的文本到图像…

AIGC:让生成式AI成为自己的外脑(文末送书)

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 什么是AIGC?二. AIGC如何运作&#xff1f;2.1 步骤一&#xff1a;收集数据2.…

算法基础之线段树

文章目录 线段树 线段树 线段树的原理十分简单&#xff0c;但是在代码上会相对复杂一点 他也是用来维护一个序列&#xff0c;是一个完全二叉树的形状 对于每一个节点是一个结构体 struct Node {int L,R; int sum; // 以和为例 };假设序列为1到7&#xff0c;那么根节点存的…

5G安卓手机定制_基于天玑900的安卓主板方案

5G安卓手机方案是一款采用联发科MT6877(天玑900)平台的高性能、可运行安卓操作系统的5G智能模块。该手机采用台积电6纳米低功耗工艺&#xff0c;主频高达2.4GHz&#xff0c;内存支持LPDDR5&#xff0c;并支持5G Sub-6GHz全频段和5G双载波聚合技术等多种制式。同时&#xff0c;该…

统计学-R语言-7.4

文章目录 前言非参数检验两个独立样本的Mann-Whitney检验 练习 前言 本片是对非参数检验最后的介绍。 非参数检验 两个独立样本的Mann-Whitney检验 Mann -Whitney检验也称为Mann- Whitney U检验&#xff08;Mann-Whitney U test&#xff09;或称为 Wilcoxon秩和检验&#xf…