2015-05-18 27 views
33

Câu hỏi của tôi liên quan đến thư viện hiện có mà tôi muốn xuất bản dưới dạng mô-đun NPM. Thư viện đã được sử dụng và hiện tại là require d qua hệ thống tệp cục bộ.Thư mục gốc trong package.json

Tôi làm cách nào để chỉ định thư mục gốc của tệp của mô-đun?

Nếu tôi có một cấu trúc như:

. 
├── package.json 
├── src 
| ├── js 
| └────── lib 
| └───────── my 
| └───────────── thing.js 
| └───────────── that.js 

Làm thế nào để xác định rằng gốc rễ của mô-đun của tôi, và các tập tin truy cập là src/js/lib/my/?

Tôi muốn sử dụng như sau từ một dự án bên ngoài:

var thing = require('my/thing'), 
    that = require('my/that'); 

tôi thấy "files" tài sản trong package.json, đây là cách đúng đắn để đi đâu?

+1

Helo @Drahcir, bạn có thể làm điều này không? Tôi đang ở trong tình trạng tương tự. –

Trả lời

5

Khi doc nói:

Các lĩnh vực chính là một module ID đó là điểm mấu chốt chính để chương trình của bạn.

Vì vậy, bạn sẽ có một cái gì đó như "main": "src/js/lib/my/app.js" trong tệp package.json của mình.

Tôi khuyên bạn nên tạo một tệp app.jsmodule.exports các con khác nhau của bạn. Ví dụ:

module.exports.thing = require('./thing'); 
module.exports.that = require('./that'); 

Và sử dụng chúng như thế này:

var mylib = require('mylib') 
    , thing = mylib.thing 
    , that = mylib.that; 
+5

Gói của tôi là một thư viện đã tồn tại, tôi không thể thay đổi cấu trúc. Tôi chỉ cần NPMify thư viện của tôi. – Drahcir

+0

Tại sao thêm các mục vào 'package.json' không thay đổi lib, nhưng thêm một index.js là? Đây sẽ là câu trả lời được chấp nhận. –

2

package.json chủ yếu là một tập tin được sử dụng bởi npm để cài đặt và quản lý phụ thuộc.

các require xây dựng không quan tâm nhiều về package.json vì vậy bạn sẽ không thể sử dụng nó để lật đổ đường require công trình và làm cho nó tin rằng gói không phải là nơi mà các chương trình require tải hy vọng chúng.

Xem tài liệu trên https://nodejs.org/api/modules.html và chương trình tải ở đây:

bạn có thể có thể sử dụng kỹ thuật mà 'Đang tải từ các thư mục toàn cầu' các cuộc gọi tài liệu và xác định các biến NODE_PATH môi trường.

nhưng tôi khuyên bạn nên dính vào một cách tiêu chuẩn hơn: - đặt module của bạn trong một thư mục node_modules - hoặc bắt đầu phân cấp mô-đun của bạn trong cùng thư mục nơi app.js hoặc index.js của bạn nằm

+1

Đây là một mô-đun mà tôi muốn * xuất bản * – Drahcir

0

trong webpack, bạn có thể chỉ định resolve.alias như thế này:

{ 
    resolve: { 
    alias: { 
     'my': 'my/src' 
    } 
    } 
} 

hoặc bạn có thể chỉ định directions tùy chọn trong gói.json

{ 
    directions: { 
    'lib': 'src/lib' 
    } 
} 
0

Đối với một giải pháp có nguồn gốc, thấy vấn đề nút này https://github.com/nodejs/node/issues/14970

Các yêu cầu tính năng gợi ý một lĩnh vực mainDir trong package.json bên cạnh chính.

Càng nhiều người bỏ phiếu, càng có nhiều khả năng nó sẽ được triển khai

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