(これがなぜだまされていないのかについては最後を参照してください JavaScriptファイルを別のJavaScriptファイルに含める方法は? )
Javascipt + Vue + webpack + vue-loader noob ...最も単純なことにつまずきました!
テンプレートがあるApp.vue
があります:
<template>
<div id="app">
<login v-if="isTokenAvailable()"></login>
</div>
</template>
isTokenAvailable
内のVueに対して、通常の方法でmethods
メソッドを宣言します。別の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
数時間の混乱の後、私は最終的に動作するものを得ましたが、ここで同様の問題で部分的に答えました: JavaScriptファイルを別のJavaScriptファイルに含めるにはどうすればよいですか?
しかし残りの部分を台無しにしていたインポートがありました:
.vue
ファイルでrequireを使用します<script>
var mylib = require('./mylib');
export default {
....
mylib
のエクスポート exports.myfunc = () => {....}
import
を避ける私の場合の実際の問題(関連性があるとは思いませんでした!)は、mylib.js
自体が他の依存関係を使用していたことです。結果として生じるエラーはこれとは何の関係もないようで、webpack
からの変換エラーはありませんでしたが、とにかく私は持っていました:
import models from './model/models'
import axios from 'axios'
これは、.vue
コンポーネントでmylib
を使用していない限り機能します。ただし、mylib
を使用するとすぐに、この問題で説明されているエラーが発生します。
変更後:
let models = require('./model/models');
let axios = require('axios');
そして、すべてが期待どおりに機能します。
src/mylib.js
からコンポーネントにデータをインポートするとします。
var test = {
foo () { console.log('foo') },
bar () { console.log('bar') },
baz () { console.log('baz') }
}
export default test
.Vueファイルでは、src/mylib.js
からtest
をインポートしました。
<script>
import test from '@/mylib'
console.log(test.foo())
...
</script>
私はAnacrustの答えが好きですが、「console.log」が2回実行されるという事実により、src/mylib.js
の小さな更新をしたいと思います:
let test = {
foo () { return 'foo' },
bar () { return 'bar' },
baz () { return 'baz' }
}
export default test
他のすべてのコードは同じままです...