首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >找不到模块'prismjs/components/prism-core‘vue-prism-编辑器的声明文件

找不到模块'prismjs/components/prism-core‘vue-prism-编辑器的声明文件
EN

Stack Overflow用户
提问于 2021-03-20 21:40:50
回答 3查看 3K关注 0票数 3

我只是试图在我的vue-棱镜编辑器应用程序中使用这个包( vuejs 3 ),但是我总是收到前面提到的错误。

代码语言:javascript
运行
复制
TS7016: Could not find a declaration file for module 'prismjs/components/prism-core'. 'C:/Sibeesh/GitHub/vue-resume/node_modules/prismjs/components/prism-core.js' implicitly has an 'any' type.
  Try `npm i --save-dev @types/prismjs` if it exists or add a new declaration (.d.ts) file containing `declare module 'prismjs/components/prism-core';` 

我确实安装了@types/prismjs,但那里没有任何进展。我跟踪自述的步骤,并尝试完全一样。

下面是我的package.json文件。

代码语言:javascript
运行
复制
{
  "name": "vue-resume",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "core-js": "^3.6.5",
    "jsoneditor": "^9.2.0",
    "vue": "^3.0.0",
    "vue-class-component": "^8.0.0-0",
    "vue-prism-editor": "^2.0.0-alpha.2",
    "vue-router": "^4.0.0-0",
    "vuex": "^4.0.0-0"
  },
  "devDependencies": {
    "@types/prismjs": "^1.16.3",
    "@typescript-eslint/eslint-plugin": "^4.18.0",
    "@typescript-eslint/parser": "^4.18.0",
    "@vue/cli-plugin-babel": "~4.5.0",
    "@vue/cli-plugin-eslint": "~4.5.0",
    "@vue/cli-plugin-router": "~4.5.0",
    "@vue/cli-plugin-typescript": "~4.5.0",
    "@vue/cli-plugin-vuex": "~4.5.0",
    "@vue/cli-service": "~4.5.0",
    "@vue/compiler-sfc": "^3.0.0",
    "@vue/eslint-config-prettier": "^6.0.0",
    "@vue/eslint-config-typescript": "^7.0.0",
    "eslint": "^6.7.2",
    "eslint-plugin-prettier": "^3.3.1",
    "eslint-plugin-vue": "^7.0.0",
    "prettier": "^2.2.1",
    "prismjs": "^1.23.0",
    "sass": "^1.26.5",
    "sass-loader": "^8.0.2",
    "typescript": "~4.1.5"
  }
}

这是我的vue组件。

代码语言:javascript
运行
复制
<template>
  <div class="hello">
    <prism-editor
      class="code-editor"
      v-model="code"
      :highlight="highlighter"
      line-numbers
    ></prism-editor>
  </div>
</template>

<script lang="ts">
  // import Prism Editor
  import { PrismEditor } from 'vue-prism-editor';
  import 'vue-prism-editor/dist/prismeditor.min.css'; // import the styles somewhere

  // import highlighting library (you can use any library you want just return html string)
  import { highlight, languages } from 'prismjs/components/prism-core';
  import 'prismjs/components/prism-javascript';

  export default {
    components: {
      PrismEditor,
    },
    data: () => ({ code: 'console.log("Hello World")' }),
    methods: {
      highlighter(code: string) {
        return highlight(code, languages.js); // languages.<insert language> to return html with markup
      },
    },
  };
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss">
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}

/* required class */
  .code-editor {
    /* we dont use `language-` classes anymore so thats why we need to add background and text color manually */
    background: #2d2d2d;
    color: #ccc;

    /* you must provide font-family font-size line-height. Example: */
    font-family: Fira code, Fira Mono, Consolas, Menlo, Courier, monospace;
    font-size: 14px;
    line-height: 1.5;
    padding: 5px;
  }

  /* optional class for removing the outline */
  .prism-editor__textarea:focus {
    outline: none;
  }

</style>

你曾经在vue 3应用程序中使用过这个插件吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-03-20 21:40:50

在这个问题上花了一段时间之后,我可以找出我在做什么错误。你注意到我script里的script了吗?这就是这个问题的根本原因。将其从<script>中删除后,错误就消失了。这个GitHub中的问题帮助我找到了解决这个问题的方法。这种方法的一个缺点是,我们不再能够使用Type annotations,因为这将只支持TypeScript文件。

另一个错误是,我没有包括对import 'prismjs/components/prism-clike';的引用。如果不包括该文件,我们将得到前面的错误。

代码语言:javascript
运行
复制
Uncaught TypeError: Cannot read property 'class-name' of undefined
    at eval (prism-javascript.js?416b:3)

另一种方法:

正如错误中提到的,您还可以创建一个.d.ts文件并添加declare module 'prismjs/components/prism-core'。我在组件目录中创建了这个文件。

然后您可以用前面的方式重写脚本。

代码语言:javascript
运行
复制
<script lang="ts">
import { PrismEditor } from "vue-prism-editor";
import { highlight, languages } from "prismjs/components/prism-core";
import "vue-prism-editor/dist/prismeditor.min.css";
import "prismjs/components/prism-clike";
import "prismjs/components/prism-json";
import "prismjs/themes/prism-tomorrow.css";
import sampleData from "../assets/resume-template.json";
import { Options, Vue } from "vue-class-component";

@Options({
  components: {
    PrismEditor,
  },
  data: () => ({
    code: JSON.stringify(sampleData),
  }),
  methods: {
    submit() {
      console.log(this.code);
    },
    highlighter(code: string) {
      return highlight(code, languages.json);
    },
  },
})
export default class CodeEditor extends Vue {}
</script>

只是分享,因为这可能对其他人有帮助。

票数 1
EN

Stack Overflow用户

发布于 2021-05-17 12:48:51

我试了几种打字稿的方法,发现这是最简单的方法。

  1. 第一
代码语言:javascript
运行
复制
yarn add @types/prismjs
  1. 然后
代码语言:javascript
运行
复制
import { highlight, languages, highlightElement } from 'prismjs';
票数 4
EN

Stack Overflow用户

发布于 2022-08-05 22:39:07

如果有人也在努力解决这个问题,以下是我的解决方案:

PrismEditor.vue

代码语言:javascript
运行
复制
<template>
  <prism-editor
    class="my-editor"
    v-model="code"
    :highlight="highlighter"
    line-numbers
    readonly
  ></prism-editor>
</template>

<script>
import { PrismEditor } from "vue-prism-editor";
import "vue-prism-editor/dist/prismeditor.min.css";
import { highlight, languages } from "prismjs/components/prism-core";
import "prismjs/components/prism-clike";
import "prismjs/components/prism-javascript";
import "prismjs/themes/prism-tomorrow.css";

export default {
  components: {
    PrismEditor,
  },
  props: {
    code: {
      type: String,
      default: "console.log('default value')",
    },
    lang: {
      type: String,
      default: "js",
    },
  },
  methods: {
    highlighter() {
      return highlight(this.code, languages[this.lang]);
    },
  },
};
</script>

<style>
/* required class */
.my-editor {
  /* we dont use `language-` classes anymore so thats why we need to add background and text color manually */
  background: #2d2d2d;
  color: #ccc;

  /* you must provide font-family font-size line-height. Example: */
  font-family: Fira code, Fira Mono, Consolas, Menlo, Courier, monospace;
  font-size: 14px;
  line-height: 1.5;
  padding: 5px;
}

/* optional class for removing the outline */
.prism-editor__textarea:focus {
  outline: none;
}
</style>

CodeBlock.vue

代码语言:javascript
运行
复制
<template>
  <prism-editor :code="code" :lang="lang"></prism-editor>
</template>

<script setup lang="ts">
import { ref } from "vue";
import PrismEditor from "../components/PrismEditor.vue";

const code = ref("console.log(It's working)");
const lang = ref("js");
</script>

<style></style>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66726731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档