Считать содержимое файла в массив внутри vue-компонента - PullRequest
1 голос
/ 07 мая 2019

directory structure

Внутри моего media.txt файла у меня есть:

"https://www.dropbox.com/s/******/687.jpg?dl=0",
"https://www.dropbox.com/s/******/0688.jpg?dl=0

У меня есть следующий компонент карусели Vue:

<template>
  <section>
    <v-card
        class="mx-auto"
        color="#26c6da"
        dark
        max-width="1200"
      >

      <v-carousel>
        <v-carousel-item v-for="(item,i) in items" :key="i" :src="item.src"></v-carousel-item>
      </v-carousel>

    </v-card>
  </section>
</template>

<script>
var cache = {};
// const images = require.context('../static/', false, /\.png$|\.jpg/);
// const images = require.context('../static/', false, /\.png$|\.jpg|\.mp4/); // WORKING
const images = require.context('../static/media.txt', false, /\.png$|\.jpg|\.mp4/);
var imagesArray = Array.from(images.keys());
// const images = ["./52lv.PNG", "./Capture1.PNG", "./maps.PNG"]
console.log(images.keys());
console.log('images');
console.log(images);
var constructed = [];
function constructItems(fileNames, constructed) {
  fileNames.forEach(fileName => {
    constructed.push({
      'src': fileName.substr(1)
    })
  });
  return constructed;
}
console.log('items ');
console.log(imagesArray);
// At build-time cache will be populated with all required modules. 
var res = constructItems(imagesArray, constructed);
console.log(res);
export default {
  data: function() {
    return {
      items: res
    };
  }
};
</script>

Я хочу прочитать изображения из файла media.txt в массив, а затем заполнить их каруселью src. Я пытался использовать функцию require.context Webpack, но получаю ошибку module not found.

Как мне заставить это работать?

Ответы [ 2 ]

2 голосов
/ 07 мая 2019

Вам, вероятно, следует установить https://github.com/webpack-contrib/raw-loader#getting-started (загрузчик для чтения веб-файлов в формате tpack), настроить его в своем vue.config.js, и вы сможете импортировать так: импортировать текст из 'raw-loader!./file.txt ';вместо этого используйте require.

1 голос
/ 07 мая 2019

Похоже, вы пытаетесь импортировать строковый массив (JSON) в переменную. Этот строковый массив должен быть ограничен квадратными скобками, например так:

[
  "foo",
  "bar"
]

require.context(dirPath, useSubDirs, filenameRegex) не подходит для использования здесь, так как этот метод импортирует несколько файлов из указанного каталога. Например, приведенный ниже код указывает Webpack загружать файлы *.png, *.jpg и *.mp4 из каталога с именем ../static/media.txt (который, предположительно, фактически является файлом).

require.context('../static/media.txt', false, /\.png$|\.jpg|\.mp4/) // DON'T DO THIS

Вместо этого вы можете просто использовать require('path/to/file.json'), чтобы импортировать указанный файл как объект / массив JSON. Например, чтобы импортировать src/assets/media.json (содержащий массив, упомянутый вверху), синтаксис должен быть:

// e.g., in src/components/Foo.vue
const media = require('../assets/media.json')
console.log(media) // => [ "foo", "bar" ]

демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...