как импортировать функции из другого js файла в проекте Vue + webpack + vue-loader
(см. конец, почему это не является обманом. Как включить файл JavaScript в другой файл JavaScript?)
Javascipt + Vue + webpack + vue-loader noob... наткнуться на самые простые вещи!
У меня есть App.vue
которого есть шаблон:
<template>
<div id="app">
<login v-if="isTokenAvailable()"></login>
</div>
</template>
Я объявляю метод isTokenAvailable
обычным способом для внутренних methods
Vue. Он использует функцию, которую я написал в отдельном файле js
:
<script>
import * as mylib from './mylib';
export default {
....
methods:{
isTokenAvailable: () => {
return mylib.myfunc();
}
}
}
</script>
mylib
начинается следующим образом:
import models from './model/models'
import axois from 'axios'
export default function() {
// functions and constants
}
Когда я запускаю проект, я получаю предупреждение:
export 'myfunc' (imported as 'mylib') was not found in './mylib'
Полагаю, что я не импортирую или не декларирую javascript-модуль правильно... но, похоже, существует так много способов сделать это, добавив сложность обзора в Vue, я не уверен, что такое "правильный" способ сделать это?
заранее спасибо
Почему это не обман: как включить файл JavaScript в другой файл JavaScript?
Похоже, проблема не устранена, особенно в контексте vuejs.
Я пробовал это:
<script>
const mylib = require('./mylib');
...
</script>
С измененной функцией: exports.myfunc = function()
Должен ли я иметь какую-то другую зависимость для этого? Потому что я получаю другую ошибку:
[Vue warn]: Error in render function:
TypeError: mylib.myfunc is not a function
Ответы
Ответ 1
После нескольких часов беспорядков я в конечном итоге получил что-то, что работает, частично ответил в аналогичной проблеме здесь: Как включить файл JavaScript в другой файл JavaScript?
НО был импорт, который закручивал остальную часть:
Использовать в файлах .vue
<script>
var mylib = require('./mylib');
export default {
....
Экспорт в mylib
exports.myfunc = () => {....}
Избегайте import
Фактическая проблема в моем случае (которая, как я думал, не имеет значения!) mylib.js
том, что mylib.js
сам использовал другие зависимости. Полученная ошибка, похоже, не имеет к этому никакого отношения, и не было никакой перекопанной ошибки от webpack
но в любом случае у меня было:
import models from './model/models'
import axios from 'axios'
Это работает, пока я не использую mylib
в компоненте .vue
. Однако, как только я использую mylib
там, возникает ошибка, описанная в этом вопросе.
Я изменил на:
let models = require('./model/models');
let axios = require('axios');
И все работает так, как ожидалось.
Ответ 2
Предположим, что я хочу импортировать данные в компонент из src/mylib.js
:
var test = {
foo () { console.log('foo') },
bar () { console.log('bar') },
baz () { console.log('baz') }
}
export default test
В моем файле.Vue я просто импортировал test
из src/mylib.js
:
<script>
import test from '@/mylib'
console.log(test.foo())
...
</script>
Ответ 3
Мне нравится ответ Anacrust, хотя, поскольку "console.log" выполняется дважды, я хотел бы сделать небольшое обновление для src/mylib.js
:
let test = {
foo () { return 'foo' },
bar () { return 'bar' },
baz () { return 'baz' }
}
export default test
Весь другой код остается прежним...
Ответ 4
эту статью объяснить действительно круто и просто
https://alligator.io/js/modules-es6/