2012-01-20 41 views
6

Xin chào với RequireJS tôi có thể thiết lập một đường cơ sở như thế này: base : './app/' vì thế khi tôi đang ở ./app/foo/bar/ ví dụ và tôi có một kịch bản mà tôi sử dụng require('foo'); RequireJS sau đó sẽ tìm kiếm ./app/foo.js và không có trong node_module thư mục hoặc trong ./app/foo/bar/foo.js này đến tay khi bạn có một loại cấu trúc, nơi nó sẽ sạch hơn nhiều cho bạn với tư cách là nhà phát triển để xem phụ thuộc thay vì có ../../foo.js. Tôi có thể có ./app/foo.js./app/foo/foo.js./app/foo/bar/foo.js nó sẽ được nhiều hơn sạch hơn để có:Node.js yêu cầu() so với RequireJS?

require('foo'); 
require('foo/foo'); 
require('foo/bar/foo'); 

hơn:

require('../../foo'); 
require('../foo'); 
require('./foo'); 

Bây giờ bạn có thể nói tại sao không thay đổi tên và không có foo ở khắp mọi nơi, chúng ta hãy nói rằng chúng tôi không thể vì bất kỳ lý do gì…

Một thiếu tính năng khác mà tôi thấy trong phương pháp yêu cầu của nút đối với RequireJS là khả năng đặt ánh xạ đường dẫn, nếu tôi có thư mục có tên ./app/super-sized-directory-name/ trong RequireJS tôi chỉ đơn giản có thể làm 'big-dir' : 'super-sized-directory-name' và sau đó tôi chỉ đơn giản là có thể sử dụng require('./app/big-dir/foo') với Node.js của đòi hỏi phương pháp này là không thể thực hiện như xa như tôi biết ...

+1

[modul8] (https://github.com/clux/modul8) hỗ trợ tính năng này thông qua tên miền nhưng cú pháp không tuân thủ nút.Tôi tin rằng trình duyệt chỉ hỗ trợ đường dẫn tệp tương đối – Raynos

+0

@Raynos hello! Cảm ơn vì đã trả lời! Tôi đã thay đổi câu hỏi để làm rõ hơn, tôi sẽ xem xét modul8 từ cái nhìn đầu tiên có vẻ phức tạp hơn so với browserify, những gì tôi thích trong trình duyệt là nó biên dịch kịch bản và chấp nhận cà phê quá tuyệt vời – panosru

+0

@Raynos Tôi đã kiểm tra lại modul8 và đọc tài liệu của nó cẩn thận hơn Tôi tin rằng nó rất tuyệt và có thể là những gì tôi đang tìm kiếm! Tôi sẽ kiểm tra nó ngay bây giờ :) – panosru

Trả lời

2
--alias, -a Register an alias with a colon separator: "to:from" 
      Example: --alias 'jquery:jquery-browserify' 

Bạn có thể đăng ký bí danh với browserify, do đó bao gồm việc đổi tên của bạn.

Đối với đường dẫn tuyệt đối bắt nguồn từ, điều đó không thể thực hiện được. Như đã đề cập, modul8 có cơ chế không gian tên để giải quyết vấn đề này.

Tôi muốn giới thiệu bạn pong SubStack trong #stackvm trên freenode và hỏi anh ấy trực tiếp.

+0

Trình duyệt hoặc modul8 có hoạt động không đồng bộ không? Nếu không, có vẻ như tôi yêu cầu ít nhất quyền được sử dụng cho các mô-đun được sử dụng trong trình duyệt. – Bruiser

+1

@Bruiser chúng hoạt động không đồng bộ, có nghĩa là chúng không chặn. Chúng hoạt động bằng cách tải trước tất cả các mô-đun – Raynos

+0

cảm ơn, vì vậy bạn muốn sử dụng browserify trên requirejs trong một dự án nút? – Bruiser

0

Nó có thể hoặc không thể giúp bạn, nhưng tôi tin rằng Bộ tải Dojo Frameworker là API tương thích với RequireJS và cung cấp cho bạn đang sử dụng một microkernel mới không gây ô nhiễm không gian tên chung.

Tôi tin rằng hiện tại chỉ có require()define() trong không gian tên chung.

Dù sao phương pháp của họ để đối phó với điều này là để làm một cái gì đó như:

require(["dojo/node!util"], function(util){ 
    // Module available as util 
}); 

Các tài liệu là ở http://dojotoolkit.org/reference-guide/1.8/dojo/node.html

0

Sử dụng uRequire mà cung cấp một 'cầu' giữa nodejs require và AMD define mô-đun, mà không phát minh lại bánh xe (nó được xây dựng trên đầu trang của hai tiêu chuẩn). Về cơ bản, nó chuyển đổi các mô-đun từ AMD hoặc định dạng commonJS sang định dạng khác hoặc UMD chạy trơn tru trên cả hai trình duyệt nút & trình duyệt.

Nó cũng đang dịch đường dẫn phụ thuộc với flexible path conventions, vì vậy bạn có thể có '../../foo' hoặc 'bar/foo' tùy thuộc vào ý nghĩa nào tại thời điểm bạn ở.

Mô-đun AMD hoặc UMD của bạn được tải không đồng bộ trên trình duyệt (sử dụng AMD/requireJs hoặc bộ tải AMD khác) và trên nút không đồng bộ require(['dep1', 'dep2'], function(dep1,dep2){...}) cũng được mô phỏng.

Các vấn đề liên quan