การเรียงลำดับการนำเข้าโมดูล js และดำเนินการปัญหา

ฉันใช้ Vue และเพิ่งพบปัญหา

ถ้าฉันมีสองไฟล์ fileA และ fileB และใน fileB ฉันจะเขียน console.log('file B test')

เมื่อฉันทำ

console.log('file A test') 
import B from '@/app/fileB'

-> the devTool shows file B's console.log first  

แล้วปัญหาที่นี่คืออะไร? การสั่งนำเข้า ? รับประกันว่าจะนำเข้าและดำเนินการจากบนลงล่างหรือไม่ หากมีใครรู้อะไรเกี่ยวกับการนำเข้าหรือดำเนินการสั่งซื้อ ขอบคุณก่อน!!


person benson    schedule 13.05.2021    source แหล่งที่มา


คำตอบ (1)


คำสั่งการนำเข้าจะถูกยกขึ้นไปที่ด้านบนสุดของโมดูลเสมอ โมดูลที่ประกอบด้วย

// some non-import code
import foo from 'foo';
// some more non-import code 2
import bar from 'bar';
// some more non-import code 3

จะทำงานเหมือนกับว่าการนำเข้าทั้งหมดอยู่ที่ด้านบนสุด:

import foo from 'foo';
import bar from 'bar';

// some non-import code
// some more non-import code 2
// some more non-import code 3

สำหรับสิ่งที่ดูเหมือนคุณต้องการทำ คุณสามารถให้ B มีเมธอด init หรือบางอย่างที่คุณเรียกเพื่อให้มันทำสิ่งต่างๆ ได้:

import B from '@/app/fileB'
console.log('file A test')
B.init();

ตัวเลือกอื่นที่ฉันชอบคือการนำเข้าและส่งออก ฟังก์ชัน เสมอ คุณสามารถมีโมดูล makeB แทนที่จะเป็น B แล้วเรียกมันใน A:

// b
export const makeB = () => {
  const b = {};
  console.log('creating B now');
  // other stuff
  return b;
};
// a
import { makeB } from './makeB';
console.log('file A test');
const b = makeB();
// do stuff with b
person CertainPerformance    schedule 13.05.2021
comment
สวัสดี @CertainPerformance ขอบคุณสำหรับการตอบกลับของคุณ ดังนั้นคุณบอกว่าคำสั่งการนำเข้าจะถูกยกขึ้นไปด้านบนสุดเสมอ จะเกิดอะไรขึ้นถ้าฉันมีไฟล์นำเข้าหลายไฟล์ และภายในแต่ละไฟล์ก็มีการนำเข้าหลายไฟล์ด้วย การนำเข้าทั้งหมดถูกยกขึ้นไปด้านบนก่อนหรือไม่ เพราะตอนนี้ฉันกำลังดูแลโปรเจ็กต์และประสบปัญหาในการสั่งซื้อและพยายามหาคำตอบ แต่การเรียงลำดับโค้ดนั้นแตกต่างจากที่ฉันคิด :( - person benson; 13.05.2021
comment
ใช่ การนำเข้าทั้งหมดสำหรับไฟล์ทั้งหมดจะถูกยกไปที่ด้านบน - ทุกไฟล์จะถูกโหลดก่อนที่ JavaScript ที่เหมาะสมจะทำงานจริง วิธีแก้ปัญหาของฉันสำหรับปัญหานี้คือส่งออกฟังก์ชันเสมอ และเพื่อหลีกเลี่ยงผลข้างเคียงที่ระดับบนสุดของโมดูล stackoverflow.com/a/52827581 stackoverflow.com /a/59998121 stackoverflow.com/a/63529657 - person CertainPerformance; 13.05.2021