Rails 6 + Webpacker 添加和使用yaml-loader

Rails 6 + Webpacker add and use yaml-loader

我正在尝试从我的项目中的一个包加载 YAML 文件,目前是这样的:

import SwaggerUI from 'swagger-ui';

const spec = require('./swagger-config.yaml');

const ui = SwaggerUI({
  spec,
  dom_id: '#swagger',
});

这是为了初始化 swagger-ui,我用给定的 dom_id 调用 SwaggerUI 没有问题,但是当我尝试添加规范文件时,渲染一些东西(这是功能)我收到这个:

                       ERROR in ./app/javascript/packs/swagger-config.yaml 7:7
XX:53:17 webpacker.1 | Module parse failed: Unexpected token (7:7)
XX:53:17 webpacker.1 | 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

如果我将 yaml-loader 添加到项目中:

// package.json
{
  ...
  "dependencies": {
    ...
    "yaml-loader": "^0.6.0"
  },
  "version": "0.1.0",
  "devDependencies": {
    "webpack-dev-server": "^3.11.0"
  }
}

// config/webpack/environment.js
const { environment } = require('@rails/webpacker')

const yamlLoader = {
  test: /\.yaml$/,
  use: 'yaml-loader'
}

environment.loaders.append('yaml', yamlLoader)

module.exports = environment

然后我收到这条消息:

xx:55:35 webpacker.1 | ERROR in ./app/javascript/packs/swagger-config.yaml 1:10
xx:55:35 webpacker.1 | Module parse failed: Unexpected token (1:10)
xx:55:35 webpacker.1 | File was processed with these loaders:
xx:55:35 webpacker.1 |  * ./node_modules/yaml-loader/index.js
xx:55:35 webpacker.1 | You may need an additional loader to handle the result of these loaders.

为了在包中加载这样的 YAML 文件,是否有与 Rails 相关的具体操作?

答案在回购的 README 中:

... For Webpack v4, you'll need to set the rule to have type: "json"

config/webpack/environment.js 文件看起来像:

const { environment } = require('@rails/webpacker')

environment.loaders.append(
  'yaml', 
  { test: /\.ya?ml$/,  use: 'yaml-loader', type: 'json' }
)

module.exports = environment