Глобальный импорт js-файлов в vuejs 3

#javascript #vue.js #vuejs3

#javascript #vue.js #vuejs3

Вопрос:

Привет, я пытаюсь импортировать jQuery и THREEJS в свой Vue.js cli, но я не могу найти способ импортировать их глобально.

Когда я пытаюсь импортировать их в свой файл .vue (например home.vue ) Я получаю эту ошибку

«импорт» и «экспорт» могут отображаться только на верхнем уровне (5: 4)

Поэтому я попытался импортировать их в main.js использование window.$ = window.jQuery = require('jquery')

Но затем я получаю следующую ошибку

‘$’ не определен

И то же самое касается ТРЕХ

Я посмотрел онлайн, но большинство ответов касаются vuejs 2

Редактировать: это мой сценарий в Home.vue

 var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(50, 1, 0.1, 1000);

var renderer = new THREE.WebGLRenderer({alpha: true});
renderer.setSize(200, 200);
$('.icon').append(renderer.domElement);

var geometry = new THREE.IcosahedronBufferGeometry();
var edges = new THREE.EdgesGeometry(geometry);
var line = new THREE.LineSegments(edges, new THREE.LineBasicMaterial({color: 0xffffff}));
scene.add(line);

camera.position.z = 2.5;

var animate = function () {
  requestAnimationFrame(animate);

  line.rotation.x  = 0.0025;
  line.rotation.y  = 0.01;

  renderer.render(scene, camera);
};

animate();
 

Именно здесь я попытался вызвать gloabally THREE и jQuery :

 import { createApp } from 'vue'
import App from './App.vue'
import Loading from './Loading.vue'
import router from './router'

window.$ = require('jquery')
window.JQuery = require('jquery')

window.THREE = require('three')


createApp(App).use(router).mount('#app')
createApp(Loading).mount('#loading')
 

И package.json

 {
  "name": "portfolio-app",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "core-js": "^3.6.5",
    "vue": "^3.0.0",
    "vue-nprogress": "^0.2.0",
    "vue-router": "^4.0.0-0"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "~4.5.0",
    "@vue/cli-plugin-eslint": "~4.5.0",
    "@vue/cli-plugin-router": "^4.5.9",
    "@vue/cli-service": "~4.5.0",
    "@vue/compiler-sfc": "^3.0.0",
    "babel-eslint": "^10.1.0",
    "eslint": "^6.7.2",
    "eslint-plugin-vue": "^7.0.0-0",
    "node-sass": "^4.12.0",
    "sass-loader": "^8.0.2"
  }
}
 

Комментарии:

1. пожалуйста, поделитесь всем кодом и package.json

2. Готово, я отредактировал сообщение

Ответ №1:

Не пытайтесь определять их глобально, просто требуйте их, когда вы хотите их использовать, у Home.vue вас должно быть что-то вроде :

 
const $ = require('jquery')
const THREE = require('three')

export default{
name:'Home',
...

mounted(){
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(50, 1, 0.1, 1000);

var renderer = new THREE.WebGLRenderer({alpha: true});
renderer.setSize(200, 200);
$('.icon').append(renderer.domElement);

var geometry = new THREE.IcosahedronBufferGeometry();
var edges = new THREE.EdgesGeometry(geometry);
var line = new THREE.LineSegments(edges, new THREE.LineBasicMaterial({color: 0xffffff}));
scene.add(line);

camera.position.z = 2.5;

var animate = function () {
  requestAnimationFrame(animate);

  line.rotation.x  = 0.0025;
  line.rotation.y  = 0.01;

  renderer.render(scene, camera);
};

animate();
}

}
}

 

Комментарии:

1. Это сработало отлично, спасибо! Я вроде как новичок в VueJS, это плохая привычка импортировать глобально?

2. пожалуйста, нет, это неплохая практика, но если вам это нужно в некоторых компонентах, просто требуйте его внутри этих компонентов