2013-01-19 3 views
8

Tôi đã viết một mô-đun npm đơn giản để biên dịch trước các mẫu handlebars của tôi khi sử dụng máy nén django để xử lý sau cho một số thành phần phía máy khách và thấy rằng tôi cần gửi mô-đun npm với một vài tệp js.Làm cách nào để tham chiếu các tệp cục bộ trong mô-đun npm?

Hiện nay tôi chỉ là giả định không ai được cài đặt này với cờ toàn cầu bởi vì tôi đã "cứng mã hóa" đường dẫn đến những phụ thuộc trong mô-đun NPM tự

dụ bố trí của module NPM tôi

/
*/bin
* /lib/main.js
* /vendor/ember.js

Bây giờ bên main.js tôi muốn sử dụng các ember tập tin .js ... hiện cách tiếp cận cứng mã hoá của tôi trông như thế này

var emberjs = fs.readFileSync('node_modules/django-ember-precompile/vendor/ember.js', 'utf8'); 

Một lần nữa chỉ -đây làm việc vì tôi giả sử bạn cài đặt nó tại địa phương nhưng tôi muốn nghĩ Node.js có một cách hợp pháp hơn để có được các tệp được nhúng cục bộ

Bất kỳ ai cũng biết cách tôi có thể cải thiện tính năng này để thân thiện hơn "toàn cầu"?

Trả lời

1

Những gì bạn có thể làm là lấy thư mục của tệp hiện tại và làm cho đường dẫn tệp của bạn liên quan đến điều đó.

var path = require('path') 
, fs = require('fs'); 

var vendor = path.join(path.dirname(fs.realpathSync(__filename)), '../vendor'); 
var emberjs = fs.readFileSync(vendor + '/ember.js', 'utf8'); 

Hy vọng điều đó sẽ hữu ích!

3

Một trong những điểm mạnh của Node.js là bạn có thể nhanh chóng và hoạt động như thế nào. Nhược điểm của phương pháp này là bạn buộc phải phù hợp với các mẫu thiết kế được xây dựng xung quanh.

Đây là ví dụ về cách tiếp cận của bạn khác quá nhiều so với cách tiếp cận của Nút. Node mong đợi mọi thứ trong một mô-đun được hiển thị từ các mô-đun xuất, bao gồm các mẫu.

Di chuyển readFileSync vào mô-đun django-ember-precompile, sau đó hiển thị giá trị trả về thông qua xuất mô-đun trong lib/main.js.

Ví dụ:

package.json 
    { 
    "name": "django-ember-precompile", 
    "main": "lib/main.js" 
    } 
lib/main.js 
    module.exports.ember = readFileSync('vendor/ember.js') 
vendor/ember.js 

Bạn lấy mẫu của bạn qua

var template = require('django-ember-precompile').ember 

Ví dụ này có thể được tinh chế, nhưng ý tưởng cốt lõi là như nhau.