【问题标题】:How do you load a YAML file in Vue?如何在 Vue 中加载 YAML 文件?
【发布时间】:2020-11-14 06:34:09
【问题描述】:

我对 Vue 和整个网络生态系统还比较陌生。

我一直在构建一个小应用程序,并决定主要使用 YAML 来存储数据而不是 JSON,以便我可以使用 cmets。

我尝试了这两种 YAML 解析器:

但是,当我运行 vue serve 时,两者都遇到了同样的问题:

 error  in ./assets/data.yaml

Module parse failed: Unexpected character '#' (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
> #im a comment
| foo: "hello"
| bar: "world"

我相当肯定这是有效的 YAML...这是我的 YAML 文件的样子:

#im a comment
foo: "hello"
bar: "world"

这是我尝试导入它的方式:

import data from "./assets/data.yaml"

我尝试按照错误指向的 URL (https://webpack.js.org/concepts#loaders) 上的说明进行操作,但立即丢失了,因为:

  1. 我的项目中没有 webpack.config.js(它是通过 vue-cli 自动为我设置的)
  2. const path = require('path'); 格式似乎不适用于 Vue 项目?

YAML 解析器和 webpack 页面都假设了很多我没有的先决知识,进一步谷歌搜索只会让我更加困惑:(

任何指针将不胜感激!

【问题讨论】:

  • vue.config.js 文件添加到您的项目并阅读有关Adding a New Loader 的信息。
  • 我刚刚将 vue-cli-plugin-yaml 添加到我的 vue 项目中......一切都开箱即用 - 除了我使用 import data from "@/assets/data.yaml" 但这只是路径差异,因此与您的任何错误无关可能会得到
  • @JaromandaX 嗯,我刚刚通过执行vue create test 创建了一个 vue 新项目,遵循默认步骤,然后通过npm install --save-dev vue-cli-plugin-yaml 添加vue-cli-plugin-yaml,但我仍然看到相同的错误:(
  • @DigitalDrifter 我关注了您的链接,但似乎假设我对加载程序 API 有所了解?我什至不知道这里使用的方法是做什么的(例如 use() 函数是做什么的?)。我试图只替换示例中的相关位,但最终出现相同的错误。
  • @SHiLLySiT 你能分享来自vue config inspect 的输出吗?这是你当前的项目配置,其中包含一些样板文件,这些样板文件可能会或可能不会出现在你的vue.config.js 文件中,当你的项目是已创建

标签: javascript vue.js webpack yaml


【解决方案1】:

在摆弄vue-cli-plugin-yaml 一段时间后,我放弃并尝试@DigitalDrifter's advice 并阅读Adding a New Loader。然而,仅此页面并没有大量关于如何使用 API 的信息,所以我浏览了 Github 上的 vue.config.js 文件,直到我可以拼凑起来:

module.exports = {
  chainWebpack: config => {
    config.module
      .rule('yaml')
        .test(/\.ya?ml?$/)
        .use('json-loader')
          .loader('json-loader')
          .end()
        .use('yaml-loader')
          .loader('yaml-loader')
  }
}

正如 vue.config.js 文件所示,我最终安装了 yaml-loaderjson-loader

但是,这仍然不起作用。我尝试了很多年不同的 vue.config.js 配置,但最终发现该文件需要存在于我的 src 文件夹中,而不是我的项目的根目录中,例如project_folder/src/vue.config.js 不是 project_folder/vue.config.js.

但这似乎与official docs say 的内容背道而驰:

vue.config.js 是一个可选配置文件,如果它存在于您的项目根目录中(在 package.json 旁边),它将由 @vue/cli-service 自动加载。

它还会导致vue inspect --rule yaml 返回undefined,所以我不认为这是一个真正的解决方案,而是一种解决方法,所以我不会接受这个作为答案。不确定文档是否有误,或者我的环境是否有些奇怪。当然不只是这个新项目有同样的问题。

Here are the resultsvue inspect

【讨论】:

  • 谢谢,它对我有用,但我不需要将 vue.config.js 文件移动到 src 文件夹。我的设置一开始没有工作,因为我在 json-loaderyaml-loader 之间切换了初始化,但它实际上必须完全是你在代码中写下的方式(首先使用 json-loader,然后使用 yaml-loader下一个)
猜你喜欢
  • 2021-06-06
  • 1970-01-01
  • 2014-05-31
  • 2020-07-14
  • 2014-01-20
  • 1970-01-01
  • 2019-05-16
  • 2020-04-29
  • 2020-12-07
相关资源
最近更新 更多