2015-10-08 22 views
19

package.json:Làm thế nào để yêu cầu một tệp khác với tệp chính npm trong nút?

... 
"name": "mypackage", 
"main": "src/index.js" 
... 

Cấu trúc thư mục:

|- src/ 
|--- index.js 
|--- other.js 

tôi có thể yêu cầu src/index.js với require('mypackage');, nhưng làm thế nào tôi có thể yêu cầu src/other.js?

Nếu câu trả lời là require('mypackage/src/other');, là có một cách để làm cho nó để tôi có thể yêu cầu nó với require('mypackage/other'); (tức là nút giảng dạy những gì các thư mục tập tin nguồn của module của bạn?

+1

Cá nhân tôi muốn biết câu trả lời cho câu hỏi này. Cảm ơn câu hỏi Thêm vào mục yêu thích –

+0

Thật không may tôi nghĩ câu trả lời cho câu hỏi thứ hai của bạn là không. Tôi thấy mình muốn điều tương tự trong tuần này và nhìn vào nó, nhưng tôi đã không tìm thấy một cách nào. Nếu tôi sai, tôi cũng sẽ quan tâm đến câu trả lời. Theo tôi biết, gần nhất bạn có thể đến đó là tạo một 'src/package.json' và' npm link' từ 'src /' khi phát triển và sử dụng nội dung của nó khi xuất bản hoặc làm bất cứ điều gì bạn cần khi xây dựng gói. – JMM

+0

nếu bạn muốn sử dụng đường dẫn đầy đủ, bạn nên chú ý đến thư mục hiện tại của mình từ nơi bạn yêu cầu. Ví dụ nếu bạn yêu cầu từ thư mục khác trong mypackage, bạn cần phải viết một cái gì đó như thế này: require ('../ src/other') –

Trả lời

7

AFAIK Bạn sẽ phải phơi bày một cách rõ ràng nó trong thư mục gốc:

cấu trúc thư mục:

|- src/ 
|--- index.js 
|--- other.js 
|- other.js 

Sau đó, trong /other.js

module.exports = require('src/other.js'); 

Bây giờ bạn có thể làm require('mypackage/other')

2

Tôi hiện đang tìm kiếm chính xác điều tương tự.

Package.json có một tài sản gọi là 'files':

http://blog.kewah.com/2014/npm-as-a-front-end-package-manager/

https://docs.npmjs.com/files/package.json

"tệp" lĩnh vực là một mảng các file để đưa vào dự án của bạn. Nếu bạn đặt tên một thư mục trong mảng, thì nó cũng sẽ bao gồm các tệp bên trong thư mục đó.

Nhưng tôi chưa tìm cách nhập/yêu cầu tệp như vậy. Tôi không thực sự nhìn thấy một điểm khác trong danh sách các tệp khác sau đó để có thể import/require chúng?


Tôi có thể nhập tệp từ gói nếu nó được liệt kê trong mảng tệp này.

{ 
    "name": "local-ui-utilities", 
    "version": "0.0.1", 
    "description": "LOCAL UI Utilities", 
    "main": "index.jsx", 
    "author": "Norbert de Langen", 
    "license": "none", 
    "dependencies": { 
    }, 
    "files": [ 
     "/colors/sets/variables.css" 
    ] 
} 

Tôi có thể import file css từ gói sử dụng postcss-nhập khẩu:

@import "local-ui-utilities/colors/sets/a.css"; 

Điều này có lẽ không phải là sử dụng hợp cụ thể của bạn, nhưng postcss nhập khẩu chỉ sử dụng NPM dưới mui xe. Vì vậy, điều này sẽ làm việc cho trường hợp sử dụng của bạn là tốt, tôi sẽ nghĩ.

Câu hỏi này và câu trả lời chấp nhận dường như liên quan: Node/NPM: Can one npm package expose more than one file?

+0

Đã sử dụng! – Norbert

+1

"Tôi đã có thể nhập tệp từ một gói nếu nó được liệt kê trong mảng tệp này." Cảm ơn bạn đã cung cấp thông tin nhưng bạn không đề cập đến cú pháp bạn đã sử dụng để nhập nó! – FreePender

+0

khi tôi làm điều đó không có tập tin JS được xuất bản trong NPM nữa: ( –

0

Bạn sẽ phải phơi bày một cách rõ ràng các tập tin trong thư mục gốc, nhưng nhiều dự án (bao gồm cả phiên bản cũ của lodash) thực hiện điều này như một phần của một trước xuất bản bước. Trên thực tế, có a package thực hiện chính xác những gì @Creynders đề xuất, thêm module.exports = require('./path/to/file') tệp vào thư mục gốc của bạn. Một thời gian trở lại tôi đã viết lên một guide trên bắt đầu, nhưng ý chính là khá đơn giản.

Install

npm install --save-dev generate-export-aliases

Configure

{ 
    "name": "my-package", 
    "scripts": { 
    "prepublish": "generate-export-aliases" 
    }, 
    "config": { 
    "exportAliases": { 
     "other": "./src/other" 
    } 
    } 
} 

Sử dụng

const other = require('my-package/other')

KHUYẾN CÁO: Tôi là tác giả của gói

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