2013-05-04 33 views
5

Có một số file Javascript, tổ chức trong các thư mục Scripts/folder1, Scripts/folder2, ...đường dẫn tương đối sử dụng requirejs kết hợp với nguyên cảo và AMD

Với requirejs.config.baseUrl một thư mục được định nghĩa như là mặc định , ví dụ Scripts/folder1. Sau đó, trong requirejs.config.paths một số tập tin được giải quyết chỉ với tên tập tin, và một số được giải quyết với một đường dẫn tương đối (như ../folder2/blabla).

Khi mã hóa thư mục tệp Typescipt2/blabla.ts, chúng tôi cần mô-đun "toán học" từ thư mục1. Vì vậy, chúng tôi viết

import MOD1 = module("../folder1/math"); 

Về bản ghi, mọi thứ đều ổn với điều đó. Nó có thể tìm thấy các mô-đun. Tuy nhiên, với requirejs có một vấn đề. Nó không biết mô-đun "../folder1/math", nó chỉ biết "toán học".

Vấn đề có vẻ là câu lệnh nhập khẩu mong đợi tên tệp, được nhấn mạnh bằng cách bắt đầu từ thư mục hiện tại. Tuy nhiên, đây không phải là id mô-đun mà requirejs biết.

Sử dụng đường dẫn tuyệt đối ở mọi nơi, cả trong cấu hình requirejs và câu lệnh nhập trong Bản dạng, giải quyết vấn đề.

Tôi có làm điều này sai không? Hoặc là con đường tuyệt đối con đường để đi?

+1

Tôi đã phát hiện ra rằng một trong hai đường dẫn tuyệt đối, hoặc đường dẫn tương đối so với các mô-đun đầu tiên đòi hỏi js tải (thường là gốc của ứng dụng js của tôi - hoặc thư mục Scripts hoặc với thư mục Durandal the App - nhưng không nhất thiết là gốc của trang web của tôi) hoạt động. – JcFx

+0

Cảm ơn rất nhiều vì câu trả lời. Nếu module đầu tiên nằm trong/Scripts, baseUrl sẽ được đặt thành đường dẫn đó. Sau đó, nếu một mô-đun từ "folder1" được sử dụng, liên quan đến requirejs nó phải được giải quyết như "folder1/blabla". Sau đó bạn sẽ viết gì trong câu lệnh Typescript? Bạn có viết mô-đun ("folder1/blabla") không? Điều gì sẽ xảy ra nếu mô-đun, nơi câu lệnh nhập được viết, được lưu trong "folder2"? Liệu Typecript sau đó chấp nhận các mô-đun ("folder1/blabla")? – mgs

+0

Có. Theo như tôi có thể thấy đường dẫn không thay đổi, bất cứ nơi nào bạn nhập từ (miễn là bạn vẫn còn trong bối cảnh ứng dụng tương tự - vì vậy vẫn còn trong chuỗi các mô-đun được tải từ địa chỉ cơ sở ban đầu đó). – JcFx

Trả lời

6

Chỉ định baseUrl là tương đương vào thư mục gốc của file nguyên cảo của bạn:

require.config({ 
    baseUrl: './scripts', 
} 
) 

Sau đó, khi bạn sử dụng đường dẫn tương đối bắt đầu từ kịch bản thư mục mà bạn chỉ có thể làm nhập khẩu như bạn thường làm trong bản ghi và requirejs sẽ được sử dụng đường dẫn cơ sở giống nhau.

Cập nhật: trình bày này nên nên trả lời tất cả các url của bạn/sử dụng js từ câu hỏi nguyên cảo: http://www.youtube.com/watch?v=4AGQpv0MKsA với mã: https://github.com/basarat/typescript-amd/blob/master/README.md

+0

Cảm ơn rất nhiều vì câu trả lời. Vì vậy, sau đó trong phần đường dẫn requirejs các ID mô-đun sẽ là ví dụ: "thư mục/blabla".Đây là số nhận dạng, không thể sử dụng với câu lệnh nhập. Viết mô-đun ("thư mục/blabla") sẽ không hoạt động, vì thư mục cơ sở của Typescript có vẻ là thư mục, nơi tệp được chỉnh sửa hiện đang ở. Vì vậy, nếu tệp Typescript hiện đang được chỉnh sửa nằm trong "thư mục con", thì câu lệnh sẽ tìm kiếm "anotherfolder/folder/blabla". – mgs

+0

@mgs Tôi đã tạo bản trình bày (xem bản cập nhật) để trả lời bất kỳ câu hỏi nào bạn có thể có. Nếu nó không giúp tôi cho tôi biết. Tôi không rõ về vấn đề bạn đang gặp phải. – basarat

+0

@mgs bạn có thể chia rẽ dự án và tạo ra tình huống lỗi mà bạn đang gặp phải. Sau đó, tôi có thể có một cái nhìn vào nó. – basarat

2

Trong bạn yêu cầu cấu hình chỉ định đường dẫn cho từng mô-đun. Đó là vấn đề cần giải quyết con đường:

require.config({ 
    paths: { 
     jquery: 'libs/jquery-1.7.1.min', 
     jqueryui: 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min' 
     // Other modules... 
    } 
}); 
+0

Cảm ơn rất nhiều vì câu trả lời. Nếu một module được chỉ định theo cách này, thì câu lệnh import được viết bằng Typescript như thế nào? Nếu tệp Typecript hiện đang được chỉnh sửa nằm trong cùng một thư mục, nó có thể được sử dụng với mô đun ("blabla") và mọi thứ đều ổn. Tuy nhiên, nếu nó nằm trong một thư mục khác, giống như mô-đun ("../ folder/blabla") phải được sử dụng. Và sau đó requirejs không biết gì về module. – mgs

+0

Đây không phải là câu trả lời hay. Nó là cồng kềnh khi phải viết tất cả các mô-đun được sử dụng trong ứng dụng trong đối tượng "đường dẫn". –

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