Hướng dẫn how to link a javascript file to another javascript file - cách liên kết một tệp javascript với một tệp javascript khác

Các phiên bản cũ của JavaScript không có nhập khẩu, bao gồm hoặc yêu cầu, vì vậy nhiều cách tiếp cận khác nhau đối với vấn đề này đã được phát triển.

Nhưng kể từ năm 2015 (ES6), JavaScript đã có tiêu chuẩn mô -đun ES6 để nhập các mô -đun vào Node.js, cũng được hỗ trợ bởi hầu hết các trình duyệt hiện đại.

Để tương thích với các trình duyệt cũ hơn, các công cụ xây dựng như webpack và rollup và/hoặc các công cụ chuyển đổi như Babel có thể được sử dụng.

Mô -đun ES6

Các mô -đun ECMAScript (ES6) đã được hỗ trợ trong Node.js kể từ v8.5, với cờ

export function hello() {
  return "Hello";
}
7 và vì ít nhất là Node.js v13.8.0 mà không có cờ. Để kích hoạt "ESM" (so với hệ thống mô-đun theo kiểu CommonJS trước đây của Node.js ["CJS"]) bạn sử dụng
export function hello() {
  return "Hello";
}
8 trong
export function hello() {
  return "Hello";
}
9 hoặc cung cấp cho các tệp tiện ích mở rộng
import { hello } from './module.js';
let val = hello();  // val is "Hello";
0. (Tương tự, các mô -đun được viết bằng mô -đun CJS trước đây của Node.js có thể được đặt tên
import { hello } from './module.js';
let val = hello();  // val is "Hello";
1 nếu mặc định của bạn là ESM.)

Sử dụng

export function hello() {
  return "Hello";
}
9:

{
    "type": "module"
}

Sau đó

import { hello } from './module.js';
let val = hello();  // val is "Hello";
3:

export function hello() {
  return "Hello";
}

Sau đó

import { hello } from './module.js';
let val = hello();  // val is "Hello";
4:

import { hello } from './module.js';
let val = hello();  // val is "Hello";

Sử dụng

import { hello } from './module.js';
let val = hello();  // val is "Hello";
0, bạn sẽ có
import { hello } from './module.js';
let val = hello();  // val is "Hello";
6:

export function hello() {
  return "Hello";
}

Sau đó

import { hello } from './module.js';
let val = hello();  // val is "Hello";
7:

import { hello } from './module.mjs';
let val = hello();  // val is "Hello";

Mô -đun Ecmascript trong trình duyệt

Các trình duyệt đã hỗ trợ trực tiếp cho việc tải các mô -đun Ecmascript (không cần công cụ như webpack) kể từ Safari 10.1, Chrome 61, Firefox 60 và Edge 16. Kiểm tra hỗ trợ hiện tại tại Caniuse. Không cần phải sử dụng tiện ích mở rộng

import { hello } from './module.js';
let val = hello();  // val is "Hello";
0 của Node.js; Các trình duyệt hoàn toàn bỏ qua các phần mở rộng tệp trên các mô -đun/tập lệnh.


// hello.mjs -- or the extension could be just `.js`
export function hello(text) {
  const div = document.createElement('div');
  div.textContent = `Hello ${text}`;
  document.body.appendChild(div);
}

Đọc thêm tại https://jakearchibald.com/2017/es-modules-in-binder/

Nhập khẩu động trong trình duyệt

Nhập khẩu động cho phép tập lệnh tải các tập lệnh khác khi cần:


Đọc thêm tại https://developers.google.com/web/updates/2017/11/dynamic-import

Node.js yêu cầu

Kiểu mô -đun CJS cũ hơn, vẫn được sử dụng rộng rãi trong Node.js, là hệ thống ________ 29/________ 30.

// mymodule.js
module.exports = {
   hello: function() {
      return "Hello";
   }
}
// server.js
const myModule = require('./mymodule');
let val = myModule.hello(); // val is "Hello"   

Có nhiều cách khác để JavaScript bao gồm nội dung JavaScript bên ngoài trong các trình duyệt không yêu cầu tiền xử lý.

Tải ajax

Bạn có thể tải một tập lệnh bổ sung với cuộc gọi AJAX và sau đó sử dụng

export function hello() {
  return "Hello";
}
1 để chạy nó. Đây là cách đơn giản nhất, nhưng nó được giới hạn trong miền của bạn vì mô hình bảo mật hộp cát JavaScript. Sử dụng
export function hello() {
  return "Hello";
}
1 cũng mở ra cánh cửa cho các vấn đề về lỗi, hack và bảo mật.

Tìm nạp tải

Giống như nhập Dynamic, bạn có thể tải một hoặc nhiều tập lệnh với cuộc gọi

export function hello() {
  return "Hello";
}
3 bằng cách sử dụng lời hứa để kiểm soát thứ tự thực thi cho các phụ thuộc tập lệnh bằng thư viện tiêm tìm nạp:

export function hello() {
  return "Hello";
}
0

tải jquery

Thư viện JQuery cung cấp chức năng tải trong một dòng:

export function hello() {
  return "Hello";
}
1

Tải tập lệnh động

Bạn có thể thêm một thẻ tập lệnh với URL tập lệnh vào HTML. Để tránh chi phí của jQuery, đây là một giải pháp lý tưởng.

Kịch bản thậm chí có thể nằm trên một máy chủ khác. Hơn nữa, trình duyệt đánh giá mã. Thẻ

export function hello() {
  return "Hello";
}
4 có thể được đưa vào trang web
export function hello() {
  return "Hello";
}
5 hoặc được chèn ngay trước khi đóng thẻ
export function hello() {
  return "Hello";
}
6.

Đây là một ví dụ về cách thức này có thể hoạt động:

export function hello() {
  return "Hello";
}
2

Hàm này sẽ thêm thẻ

export function hello() {
  return "Hello";
}
4 mới vào phần cuối của phần đầu của trang, trong đó thuộc tính
export function hello() {
  return "Hello";
}
8 được đặt thành URL được trao cho hàm là tham số đầu tiên.

Cả hai giải pháp này đều được thảo luận và minh họa trong JavaScript Madness: tải tập lệnh động.

Phát hiện khi tập lệnh đã được thực thi

Bây giờ, có một vấn đề lớn mà bạn phải biết. Làm điều đó ngụ ý rằng bạn tải mã từ xa. Các trình duyệt web hiện đại sẽ tải tệp và tiếp tục thực hiện tập lệnh hiện tại của bạn vì chúng tải mọi thứ không đồng bộ để cải thiện hiệu suất. (Điều này áp dụng cho cả phương thức jQuery và phương thức tải tập lệnh động thủ công.)

Điều đó có nghĩa là nếu bạn sử dụng các thủ thuật này trực tiếp, bạn sẽ không thể sử dụng mã mới được tải của mình theo dòng tiếp theo sau khi bạn yêu cầu nó được tải, bởi vì nó sẽ vẫn đang tải.

Ví dụ:

export function hello() {
  return "Hello";
}
9 chứa
import { hello } from './module.mjs';
let val = hello();  // val is "Hello";
0:

export function hello() {
  return "Hello";
}
3

Sau đó, bạn tải lại trang nhấn F5. Và nó hoạt động! Gây nhầm lẫn...

Vậy giờ làm gì với nó ?

Chà, bạn có thể sử dụng bản hack mà tác giả đề xuất trong liên kết tôi đã cung cấp cho bạn. Tóm lại, đối với những người vội vàng, anh ta sử dụng một sự kiện để chạy chức năng gọi lại khi tập lệnh được tải. Vì vậy, bạn có thể đặt tất cả các mã bằng thư viện từ xa trong hàm gọi lại. Ví dụ:

export function hello() {
  return "Hello";
}
4

Sau đó, bạn viết mã bạn muốn sử dụng sau khi tập lệnh được tải trong hàm Lambda:

export function hello() {
  return "Hello";
}
5

Sau đó, bạn chạy tất cả những thứ đó:

export function hello() {
  return "Hello";
}
6

Lưu ý rằng tập lệnh có thể thực thi sau khi DOM đã tải, hoặc trước đó, tùy thuộc vào trình duyệt và liệu bạn có bao gồm dòng

import { hello } from './module.mjs';
let val = hello();  // val is "Hello";
1 hay không. Có một bài viết tuyệt vời về tải JavaScript nói chung thảo luận về điều này.

Mã nguồn hợp nhất/tiền xử lý

Như đã đề cập ở đầu câu trả lời này, nhiều nhà phát triển sử dụng (các) công cụ Build/Transpilation như Bưu kiện, Webpack hoặc Babel trong các dự án của họ, cho phép họ sử dụng cú pháp JavaScript sắp tới, cung cấp khả năng tương thích ngược cho trình duyệt cũ hơn, kết hợp các tệp, Minify, Thực hiện phân tách mã, v.v.

Làm cách nào để liên kết với một tệp JavaScript khác?

Chúng tôi có thể bao gồm một tệp JavaScript trong một tệp JavaScript khác bằng hệ thống mô -đun ES6 gốc. Điều này cho phép chúng tôi chia sẻ mã giữa các tệp JavaScript khác nhau và đạt được mô -đun trong mã. Có nhiều cách khác để bao gồm một tệp JS như Node JS yêu cầu, hàm getcript của JQuery và tải nạp.using the native ES6 module system. This allows us to share code between different JavaScript files and achieve modularity in the code. There are other ways to include a JS file like Node JS require, jQuery's getScript function, and Fetch Loading.

Làm cách nào để kết hợp nhiều tệp JavaScript thành một?

Sử dụng một Bundler JavaScript để kết hợp nhiều tập lệnh nhỏ hơn vào tệp tùy chỉnh trên mỗi trang.Điều này phức tạp hơn, nhưng cho phép bạn sử dụng lại mã và có một công cụ sao chép mã cho bạn.Động lực yêu cầu các tập lệnh trong khi trang đang tải.. This is more complicated, but allows you to reuse code, and have a tool replicate the code for you. Dynamically require the scripts while the page is loading.

Tôi có thể sử dụng chức năng JavaScript từ một tệp khác không?

Miễn là cả hai được tham chiếu bởi trang web, có.Bạn chỉ cần gọi các chức năng như thể chúng nằm trong cùng một tệp JS.. You simply call the functions as if they are in the same JS file.

Bạn có thể có hai tệp JavaScript không?

Bạn có thể có các tệp riêng biệt hoặc một JS duy nhất, như mọi khi có sự đánh đổi bất kỳ tuyến đường nào bạn đi, vì vậy đó là vấn đề hiểu về Hows.Bên cạnh đó, vấn đề có lẽ là khi bạn thực hiện mã JavaScript của mình., as always there are tradeoff whatever route you take, so it's a matter of understanding the HOWs. Besides that, the issue is probably when you execute your javascript code.