Có ý nghĩa gì khi sử dụng Require.js với Angular.js không? [đóng cửa]


443

Tôi là người mới sử dụng Angular.js và cố gắng hiểu nó khác với Backbone.js như thế nào ... Chúng tôi đã từng quản lý các gói phụ thuộc của mình với Require.js trong khi sử dụng Backbone. Liệu nó có ý nghĩa để làm điều tương tự với Angular.js?


Một dự án blog và hạt giống khác: startersquad.com/blog/angularjs-requirejs
iwein

19
Không - Không sử dụng allow.js HOẶC trình duyệt với Angular.JS đơn giản là không cần phải làm điều đó - AngularJS có một hệ thống mô-đun và sử dụng một hệ thống mô-đun khác ở trên nó sẽ khiến cuộc sống của bạn trở nên khó khăn không cần thiết. Tôi đã theo dõi các câu trả lời trong chủ đề này và lãng phí quá nhiều giờ cho một thứ hoàn toàn không cần thiết. Vui lòng đọc bài viết này giải thích lý do tại sao không: Medium.com/@dickeyxxx/ từ
VitalyB

Đọc phần này để hiểu sự khác biệt giữa các góc và yêu cầu các mô-đun Juristr.com/blog/2014/07/lazy-angular-modules
pilavdzice

1
đây là một video tuyệt vời giải thích lý do tại sao đó là một ý tưởng hay và chỉ ra cách sử dụng requestJS với angularJS youtube.com/watch?v=4yulGISBF8w#t=142
gskalinskii

2
@VitalyB Bài viết hay! Tôi ủng hộ tải các ứng dụng trong miếng nhỏ. Nó sẽ không có giá đủ sớm . Heck, nó không tốn bất cứ điều gì cho tôi ngay bây giờ.
DSign

Câu trả lời:


224

Có, nó có ý nghĩa để sử dụng angular.jscùng với require.jstrong đó bạn có thể sử dụng require.jsđể mô đun hóa các thành phần.

Có một dự án hạt giống sử dụng both angular.js and require.js.


108
Dự án hạt giống được đề cập ở trên đã không được thực hiện trong một năm, vì vậy tôi đã tạo một dự án mới bằng cách sử dụng AngularJS và RequireJS mới nhất với sự hỗ trợ đầy đủ cho thử nghiệm dựa trên thử nghiệm.
tnajdek

2
@tnajdek, tôi đã cập nhật liên kết trong câu trả lời của Anshu để chỉ đến liên kết mà bạn đề xuất.
David Rivers

7
Lưu ý rằng cả hai dự án hạt giống này đều không được nhóm Angular xác nhận. Yêu cầu là một mô hình có ý nghĩa hơn trong các bối cảnh khác, và việc đánh giày nó thành Angular không phải là IMHO, một cách thực hành tốt nhất.
XML

2
Cuốn sách O'Reilly AngularJS của Brad Green & Shyam Seshadri (phát hành tháng 4 năm nay) cũng khuyên bạn nên thêm RequireJS sớm trong sự phát triển của một dự án Angular và đưa ra chi tiết khá rõ ràng.
bjorke

1
Tôi muốn có nhiều thay làm tất cả mọi thứ ở thời gian xây dựng 1. browserify.org 2. npmjs.org/package/gulp-angular-filesort
A-Dubb

150

Để nói lại những gì tôi nghĩ rằng câu hỏi của OP thực sự là:

Nếu tôi đang xây dựng một ứng dụng chủ yếu trong Angular 1.x và (hoàn toàn) làm như vậy trong kỷ nguyên của Grunt / Gulp / Broccoli và Bower / NPM, và tôi có thể có thêm một vài phụ thuộc thư viện, thì Yêu cầu thêm rõ ràng, cụ thể giá trị vượt quá những gì tôi nhận được bằng cách sử dụng Angular mà không cần Yêu cầu?

Hoặc, đặt một cách khác:

"Vanilla Angular có cần Yêu cầu quản lý tải thành phần Angular cơ bản một cách hiệu quả không, nếu tôi có cách xử lý tải tập lệnh cơ bản khác? "

Và tôi tin rằng câu trả lời cơ bản cho điều đó là: "trừ khi bạn có điều gì khác đang diễn ra và / hoặc bạn không thể sử dụng các công cụ mới hơn, hiện đại hơn".

Chúng ta hãy rõ ràng ngay từ đầu: RequireJS là một công cụ tuyệt vời giải quyết một số vấn đề rất quan trọng và bắt đầu chúng ta đi theo hướng ứng dụng Javascript chuyên nghiệp hơn, có thể mở rộng hơn. Điều quan trọng, đây là lần đầu tiên nhiều người gặp phải khái niệm mô đun hóa và đưa mọi thứ ra khỏi phạm vi toàn cầu. Vì vậy, nếu bạn định xây dựng một ứng dụng Javascript cần mở rộng quy mô, thì Yêu cầu và mẫu AMD không phải là công cụ tồi để thực hiện điều đó.

Nhưng, có điều gì đặc biệt về Angular khiến cho Require / AMD trở nên đặc biệt phù hợp không? Trên thực tế, Angular cung cấp cho bạn mô hình đóng gói và mô đun hóa của riêng nó, theo nhiều cách, nó làm cho dư thừa các tính năng mô đun hóa cơ bản của AMD. Và, việc tích hợp các mô-đun Angular vào mẫu AMD không phải là không thể, nhưng nó hơi ... khó hiểu. Bạn chắc chắn sẽ dành thời gian để có được hai mẫu để tích hợp độc đáo.

Đối với một số quan điểm từ chính nhóm Angular, có điều này , từ Brian Ford, tác giả của Angular Batarang và hiện là thành viên của nhóm nòng cốt Angular:

Tôi không khuyên bạn nên sử dụng RequireJS với AngularJS. Mặc dù điều đó chắc chắn là có thể, tôi đã không thấy bất kỳ trường hợp nào mà RequireJS có lợi trong thực tế.

Vì vậy, về câu hỏi rất cụ thể của AngularJS: Angular và Require / AMD là trực giao và ở những nơi chồng chéo. Bạn có thể sử dụng chúng cùng nhau, nhưng không có lý do cụ thể liên quan đến bản chất / mô hình của chính Angular.

Nhưng những gì về quản lý cơ bản của các phụ thuộc bên trong và bên ngoài cho các ứng dụng Javascript có thể mở rộng? Không yêu cầu làm điều gì đó thực sự quan trọng đối với tôi ở đó?

Tôi khuyên bạn nên kiểm tra Bower và NPM, và đặc biệt là NPM. Tôi không cố bắt đầu một cuộc chiến thần thánh về lợi ích so sánh của các công cụ này. Tôi chỉ muốn nói: có những cách khác để da mèo, và những cách có thể thậm chí còn tốt hơn so với AMD / Yêu cầu. (Họ chắc chắn có động lực phổ biến hơn nhiều vào cuối năm 2015, đặc biệt là NPM, kết hợp với các mô-đun ES6 hoặc CommonJS. Xem câu hỏi SO liên quan .)

Thế còn lười tải?

Lưu ý rằng lười tải và lười tải là khác nhau. Tải lười biếng của Angular không có nghĩa là bạn kéo chúng trực tiếp từ máy chủ. Trong một ứng dụng kiểu Yeoman với tự động javascript, bạn đang ghép và thu nhỏ toàn bộ shebang lại thành một tệp duy nhất. Họ có mặt, nhưng không được thực hiện / khởi tạo cho đến khi cần. Các cải tiến về tốc độ và băng thông mà bạn có được khi thực hiện điều này rất lớn, vượt xa mọi cải tiến bị cáo buộc từ việc lười tải xuống một bộ điều khiển 20 dòng cụ thể. Trong thực tế, độ trễ mạng bị lãng phí và phí truyền tải cho bộ điều khiển đó sẽ là một thứ tự có độ lớn lớn hơn kích thước của chính bộ điều khiển.

Nhưng hãy nói rằng bạn thực sự cần tải xuống một cách lười biếng, có lẽ đối với các phần được sử dụng không thường xuyên của ứng dụng của bạn, chẳng hạn như giao diện quản trị viên. Đó là một trường hợp rất chính đáng. Yêu cầu thực sự có thể làm điều đó cho bạn. Nhưng cũng có nhiều lựa chọn khác , có khả năng linh hoạt hơn để thực hiện điều tương tự. Và Angular 2.0 rõ ràng sẽ giải quyết vấn đề này cho chúng tôi, tích hợp sẵn cho bộ định tuyến . ( Chi tiết .)

Nhưng những gì về quá trình phát triển trên dev boxen địa phương của tôi?

Làm cách nào tôi có thể tải tất cả hàng chục / hàng trăm tệp script mà không cần phải đính kèm tất cả chúng vào index.html theo cách thủ công?

Hãy xem các máy phát phụ trong góc máy phát của Yeoman, hoặc tại các mẫu tự động hóa được thể hiện trong góc máy phát điện , hoặc tự động hóa Webpack tiêu chuẩn cho React. Những cách này cung cấp cho bạn một cách rõ ràng, có thể mở rộng để: tự động đính kèm các tệp tại thời điểm các thành phần được tạo ra hoặc chỉ đơn giản là lấy tất cả chúng một cách tự động nếu chúng có trong một số thư mục nhất định / khớp với các mẫu hình cầu nhất định. Bạn không bao giờ cần phải suy nghĩ về việc tải tập lệnh của riêng mình một khi bạn đã có các tùy chọn sau.

Điểm mấu chốt?

Yêu cầu là một công cụ tuyệt vời, cho những thứ nhất định. Nhưng hãy đi với hạt bất cứ khi nào có thể, và tách những mối quan tâm của bạn bất cứ khi nào có thể. Hãy để Angular lo lắng về mô hình mô đun hóa riêng của Angular và xem xét sử dụng các mô-đun ES6 hoặc CommonJS làm mô hình mô đun hóa chung. Hãy để các công cụ tự động hóa hiện đại lo lắng về việc tải tập lệnh và quản lý phụ thuộc. Và hãy quan tâm đến việc tải async theo cách chi tiết, thay vì làm rối nó với hai mối quan tâm khác.

Điều đó nói rằng, nếu bạn đang phát triển ứng dụng Angular nhưng không thể cài đặt Node trên máy của mình để sử dụng các công cụ tự động hóa Javascript vì một số lý do, thì Require có thể là một giải pháp thay thế tốt. Và tôi đã thấy các thiết lập thực sự phức tạp, nơi mọi người muốn tải động các thành phần Angular mà mỗi cái khai báo các phụ thuộc của riêng chúng hoặc một cái gì đó. Và trong khi tôi có thể cố gắng giải quyết vấn đề đó theo cách khác, tôi có thể thấy giá trị của ý tưởng, cho tình huống rất đặc biệt đó.

Nhưng nếu không ... khi bắt đầu từ đầu với một ứng dụng Angular mới và linh hoạt để tạo ra một môi trường tự động hóa hiện đại ... bạn đã có rất nhiều lựa chọn khác, linh hoạt hơn, hiện đại hơn.

(Được cập nhật liên tục để theo kịp với cảnh JS đang phát triển.)


1
Dự án hạt giống NG-Boilerplate ( github.com/ngbp/ngbp ) cũng tạo ra một ứng dụng web duy nhất với một tệp js. Sử dụng bảng kê khai HTML5 đảm bảo tệp này chỉ được tải một lần cho mỗi phiên bản.
Federico Elles

2
Mặc dù, như mọi khi, <i> nó phụ thuộc </ i>. Nhiều người sử dụng Require cho toàn bộ kiến ​​trúc của họ và cần tích hợp Angular vào hệ sinh thái đó. Đó là một tình huống rất khác so với khi bạn xây dựng các ứng dụng một cách cô lập.
Dave Nichol

2
Đã đồng ý. Nhưng lực đẩy của OP dường như là: "Nếu tôi xây dựng một ứng dụng chủ yếu ở Angular và (hoàn toàn) làm như vậy trong kỷ nguyên của Grunt, và tôi có thể có thêm một vài phụ thuộc thư viện, Yêu cầu thêm giá trị cụ thể, rõ ràng những gì tôi nhận được bằng cách sử dụng Angular mà không cần Yêu cầu? " Và tôi tin, câu trả lời là: không. Nếu bạn có một ứng dụng khổng lồ với 40 phụ thuộc bên ngoài hoặc bạn không thể kiểm soát môi trường CI của mình hoặc sếp yêu thích Yêu cầu hoặc bạn yêu thích Yêu cầu hoặc Angular chỉ là một phần của ứng dụng lớn hơn, v.v., v.v. YMMV.
XML

1
Nhưng vì anh ta dường như không hỏi những câu hỏi đó, và vì anh ta chỉ đề cập đến bối cảnh thay thế của ứng dụng Backbone, nên anh ta dường như hỏi: "vanilla Angular có cần Yêu cầu quản lý các thành phần của nó một cách hiệu quả không?" Và câu trả lời là: "trừ khi bạn có điều gì khác đang diễn ra." Ngoài ra, câu hỏi này xuất phát từ phong trào Javascript CI, trong đó chúng tôi có nhiều cách tốt hơn để xử lý 'tải tập lệnh' cơ bản, vật lý. Nếu bạn đã giải quyết được vấn đề đó, Require về cơ bản là về sự phù hợp và đóng gói phụ thuộc. Angular làm cả hai điều đó cho bạn.
XML

Google sử dụng tải nhanh trong một số dự án AngularJS, vì nếu không, người dùng sẽ tải xuống 24mb tệp khi tải trang đầu tiên (và đây là với các tệp bị làm mờ và ghép). Vì vậy, có, trong các ứng dụng phức tạp, không cần phải ghép tất cả các phần, khi có các phần người dùng sẽ không mở trong mỗi lần truy cập.
ngDeveloper

136

Vâng, nó có ý nghĩa.

Các mô-đun góc không cố gắng giải quyết vấn đề đặt hàng tải tập lệnh hoặc tìm nạp tập lệnh lười biếng. Những mục tiêu này là trực giao và cả hai hệ thống mô-đun có thể sống cạnh nhau và hoàn thành mục tiêu của chúng.

Nguồn: Trang web chính thức của Angular JS


6
Nếu bạn sử dụng một mô-đun cho mỗi tệp js, bạn có thể tải mô-đun góc của mình theo bất kỳ thứ tự nào. Nhưng nếu bạn muốn đặt các dịch vụ khác nhau trong các tệp js khác nhau nhưng bạn muốn đính kèm chúng trên cùng một mô-đun góc, bạn phải tải khai báo mô-đun trước khi khai báo dịch vụ. Vì vậy, đây là một quyết định kiến ​​trúc.
Matohawk

@Tiago: Vui lòng cung cấp một liên kết đến vị trí bạn có nguồn gốc từ đây. Tôi không thể tìm thấy nó ở bất cứ đâu. Tôi đoán rằng nó đến từ một phiên bản trước đó của các tài liệu Angular, trước khi các mẫu của Angular đã được thiết lập tốt, và trước khi rõ ràng rằng có những lợi thế đáng kể để tránh Yêu cầu, ít nhất là đối với các thành phần Angular.
XML

@XMLilley: bạn có thể cung cấp một liên kết giải thích các lợi ích của việc tránh Yêu cầu khi sử dụng Angular không? Tôi đang quyết định có sử dụng Yêu cầu trong dự án của mình hay không và điều này nghe có vẻ hữu ích.
Trevor

1
Tôi đã không rõ ràng trong ngôn ngữ của mình ở đây: có những lợi thế đáng kể để tận dụng các trình tải mô-đun tích hợp sẵn của Angular và đi cùng với các mẫu của Angular. Câu hỏi không phải là có nên tránh Yêu cầu hay không, mà là liệu có giá trị để thêm một lớp phức tạp bổ sung hay không. Điều rõ ràng là các mẫu dựng sẵn của Angular sẽ giải quyết một cách khéo léo và thanh lịch nhu cầu tải các mô-đun của chính Angular. Nếu Yêu cầu phục vụ mục đích tải các mô-đun bên ngoài bối cảnh Angular, thì cũng vậy. Nhưng sử dụng Require for Angular là không liên quan.
XML

6
@XMLilley tất cả Angular làm là cung cấp cho bạn tiêm phụ thuộc. Tải thực tế của các mô-đun là trách nhiệm của bạn. Bạn có thể làm điều này bằng cách thêm thẻ tập lệnh, có tập lệnh xây dựng hoặc sử dụng các yêu cầu. Hệ thống mô-đun Angenses không có ý kiến ​​về điều này.
gillesruppert

57

Điều này tôi tin là một câu hỏi chủ quan, vì vậy tôi sẽ cung cấp ý kiến ​​chủ quan của tôi.

Angular có một cơ chế mô đun hóa được tích hợp sẵn. Khi bạn tạo ứng dụng của mình, điều đầu tiên bạn sẽ làm là

var app = angular.module("myApp");

và sau đó

app.directive(...);

app.controller(...);

app.service(...);

Nếu bạn nhìn vào hạt giống góc cạnh là ứng dụng khởi động gọn gàng cho góc cạnh, họ đã tách các chỉ thị, dịch vụ, bộ điều khiển, vv thành các mô-đun khác nhau và sau đó tải các mô-đun đó làm phụ thuộc vào ứng dụng chính của bạn.

Cái gì đó như :

var app = angular.module("myApp",["Directives","Controllers","Services"];

Angular cũng lười tải các mô-đun này (vào bộ nhớ) chứ không phải các tệp script của chúng.

Về mặt lười biếng tải các tập tin tập lệnh, thành thật mà nói, trừ khi bạn đang viết một cái gì đó cực kỳ lớn, nó sẽ là một việc quá mức vì góc cạnh bởi bản chất của nó làm giảm số lượng mã bạn viết. Một ứng dụng điển hình được viết trong hầu hết các khung khác có thể mong đợi giảm khoảng 30-50% ở LỘC nếu được viết ở góc.


5
Thật vậy, nó cấu hình các dịch vụ trong Angular.js tốt hơn so với các mô-đun tải với Require.js. Điều này giúp chơi dễ dàng hơn với phạm vi và dịch vụ $, như tôi đã chơi với Socket.io
Marco Godínez

33

Sử dụng RequireJS với AngularJS có ý nghĩa nhưng chỉ khi bạn hiểu cách mỗi hoạt động của chúng liên quan đến việc tiêm phụ thuộc , vì mặc dù cả hai đều tiêm phụ thuộc, họ tiêm những thứ rất khác nhau.

AngularJS có hệ thống phụ thuộc riêng cho phép bạn tiêm các mô đun AngularJS vào một mô đun mới được tạo để sử dụng lại các triển khai. Giả sử bạn đã tạo một mô-đun "đầu tiên" thực hiện bộ lọc AngularJS "chào":

angular
  .module('first', [])
  .filter('greet', function() {
    return function(name) {
      return 'Hello, ' + name + '!';
    }
  });

Và bây giờ, giả sử bạn muốn sử dụng bộ lọc "chào" trong một mô-đun khác gọi là "thứ hai" thực hiện bộ lọc "tạm biệt". Bạn có thể thực hiện việc tiêm mô-đun "thứ nhất" vào mô-đun "thứ hai":

angular
  .module('second', ['first'])
  .filter('goodbye', function() {
    return function(name) {
      return 'Good bye, ' + name + '!';
    }
  });

Vấn đề là để làm cho công việc này hoạt động chính xác mà không cần RequireJS, bạn phải đảm bảo rằng mô-đun AngularJS "đầu tiên" được tải trên trang trước khi bạn tạo mô-đun AngularJS "thứ hai". Trích dẫn tài liệu:

Tùy thuộc vào một mô-đun ngụ ý rằng mô-đun cần thiết phải được tải trước khi mô-đun yêu cầu được tải.

Theo nghĩa đó, đây là nơi RequireJS có thể giúp bạn vì RequireJS cung cấp một cách rõ ràng để đưa tập lệnh vào trang giúp bạn tổ chức các phụ thuộc tập lệnh giữa nhau.

Quay trở lại các mô-đun AngularJS "thứ nhất" và "thứ hai", đây là cách bạn có thể thực hiện bằng cách sử dụng RequireJS tách các mô-đun trên các tệp khác nhau để tận dụng tải phụ thuộc tập lệnh:

// firstModule.js file
define(['angular'], function(angular) {
  angular
    .module('first', [])
    .filter('greet', function() {
      return function(name) {
        return 'Hello, ' + name + '!';
      }
    });
});
// secondModule.js file
define(['angular', 'firstModule'], function(angular) {
  angular
    .module('second', ['first'])
    .filter('goodbye', function() {
      return function(name) {
        return 'Good bye, ' + name + '!';
      }
    });
});

Bạn có thể thấy rằng chúng tôi phụ thuộc vào tệp "FirstModule" được chèn trước khi nội dung của cuộc gọi lại RequireJS có thể được thực thi, cần tải mô-đun AngularJS "thứ nhất" để tạo mô-đun AngularJS "thứ hai".

Lưu ý bên lề: Việc tiêm "angular" trên các tệp "FirstModule" và "secondModule" là phụ thuộc được yêu cầu để sử dụng AngularJS bên trong chức năng gọi lại RequireJS và nó phải được cấu hình trên cấu hình RequireJS để ánh xạ "góc" vào mã thư viện. Bạn cũng có thể tải AngularJS vào trang theo cách truyền thống (thẻ script) mặc dù đánh bại các lợi ích của RequireJS.

Thêm chi tiết về việc có hỗ trợ RequireJS từ lõi AngularJS từ phiên bản 2.0 trên bài đăng trên blog của tôi.

Dựa trên bài đăng trên blog của tôi "Tạo cảm giác về RequireJS với AngularJS" , đây là liên kết .


2
Thực sự tốt nhất, khi bao gồm một liên kết, để tóm tắt nội dung của liên kết ở đây trên Stack Overflow. Nếu liên kết của bạn không bao giờ bị phá vỡ, liên kết nào có trên Internet, câu trả lời của bạn ở đây sẽ vô dụng với khách truy cập trong tương lai. Xem xét một chỉnh sửa để mang lại một bản tóm tắt và cải thiện bài đăng này. Chúc may mắn!
jmort253

3
Có bạn đi, cảm ơn jmort253.
leog

Cảm ơn bạn đã thực hiện các chỉnh sửa này và giải thích cách RequireJS có thể giúp quản lý các phụ thuộc để tránh các vấn đề với Angular đang cố tải một cái gì đó chưa tồn tại.
jmort253

Tôi hoàn toàn đồng ý, tốt nhất là sử dụng phương pháp này cho các ứng dụng lớn nếu không bạn sẽ có nhiều thẻ <script> trong ứng dụng của mình.
I.Tyger

21

Như @ganaraj đã đề cập AngularJS có tiêm phụ thuộc vào cốt lõi của nó. Khi xây dựng các ứng dụng hạt giống đồ chơi có và không có RequireJS, cá nhân tôi thấy RequireJS có thể là quá mức cần thiết cho hầu hết các trường hợp sử dụng.

Điều đó không có nghĩa là RequireJS không hữu ích cho khả năng tải tập lệnh của nó và giữ cho cơ sở mã của bạn sạch sẽ trong quá trình phát triển. Kết hợp trình tối ưu hóa r.js ( https://github.com/jrburke/r.js ) với hạnh nhân ( https://github.com/jrburke/almond ) có thể tạo ra một câu chuyện tải tập lệnh rất mỏng. Tuy nhiên, vì các tính năng quản lý phụ thuộc của nó không quan trọng bằng cốt lõi của ứng dụng, bạn cũng có thể đánh giá các ứng dụng khách khác (HeadJS, LABjs, ...) hoặc thậm chí cả phía máy chủ (MVC4 Bundler, ...) cho ứng dụng cụ thể của bạn.


17

Vâng, nó làm, đặc biệt cho SPA rất lớn.

Trong một số kịch bản, RequireJS là phải. Ví dụ: tôi phát triển các ứng dụng PhoneGap bằng AngularJS cũng sử dụng Google Map API. Nếu không có trình tải AMD như RequireJS, ứng dụng sẽ đơn giản gặp sự cố khi khởi chạy khi ngoại tuyến vì nó không thể cung cấp các tập lệnh API Google Map. Trình tải AMD cho tôi cơ hội hiển thị thông báo lỗi cho người dùng.

Tuy nhiên, việc tích hợp giữa AngularJS và RequireJS là một chút khó khăn. Tôi đã tạo angularAMD để biến điều này thành một quá trình ít đau đớn hơn:

http://marcoslin.github.io/angularAMD/




7

Vâng, thật hợp lý khi sử dụng allowJS với Angular, tôi đã dành vài ngày để thử nghiệm một số giải pháp kỹ thuật.

Tôi đã tạo một hạt giống góc với RequireJS ở phía máy chủ. Rất đơn giản. Tôi sử dụng ký hiệu SHIM cho không có mô-đun AMD và không phải AMD vì tôi nghĩ rất khó đối phó với hai hệ thống tiêm phụ thuộc khác nhau.

Tôi sử dụng grunt và r.js để ghép các tệp js trên máy chủ tùy thuộc vào tệp cấu hình SHIM (phụ thuộc). Vì vậy, tôi chỉ giới thiệu một tập tin js trong ứng dụng của mình.

Để biết thêm thông tin, hãy truy cập vào Hạt giống góc github của tôi: https://github.com/matohawk/angular-seed-requirejs


3

Tôi sẽ tránh sử dụng Require.js. Các ứng dụng tôi đã thấy làm điều này tạo ra một mớ hỗn độn của nhiều loại kiến ​​trúc mô-đun mô-đun. AMD, tiết lộ, các hương vị khác nhau của IIFE, v.v ... Có nhiều cách khác để tải theo yêu cầu như mod loadOnDemand Angular . Việc thêm các nội dung khác chỉ giúp lấp đầy mã của bạn đầy đủ và tạo ra tín hiệu thấp cho tỷ lệ nhiễu và làm cho mã của bạn khó đọc.


2

Đây là cách tiếp cận tôi sử dụng: http://thaiat.github.io/blog/2014/02/26/angularjs-and-requirejs-for-very-large-appluggest/

Trang này cho thấy khả năng triển khai AngularJS + RequireJS, trong đó mã được phân chia theo các tính năng và sau đó là loại thành phần.


3
Ngay cả khi liên kết cung cấp thông tin để trả lời câu hỏi, một lời giải thích về những gì trang hiển thị là một cách thực hành tốt nhất.
juliocesar


0

Tôi nghĩ rằng nó phụ thuộc vào độ phức tạp của dự án của bạn vì góc được mô đun hóa khá nhiều. Bộ điều khiển của bạn có thể được ánh xạ và bạn chỉ có thể nhập các lớp JavaScript đó trong trang index.html của mình.

Nhưng trong trường hợp dự án của bạn trở nên lớn hơn. Hoặc bạn dự đoán kịch bản như vậy, bạn nên tích hợp góc cạnh với các yêu cầu. Trong này bài viết, bạn có thể thấy một ứng dụng demo cho hội nhập như vậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.