2017-02-19 91 views
1

我有一個它是由許多子模塊庫(ES6),說包裝子模塊與彙總節點

- package.json 
- lib 
    - my_package 
    - file1.js 
    - file2.js 
    - sub_module1 
     - file3.js 
     - file4.js 

我現在做進口這樣的(我所有的包內 - 使用文件解析找,不node_modules分辨率):

import {func1} from 'lib/my_package/file1' 
import {func3} 'lib/my_package/sub_module1/file3' 

因此,在實踐中我有跨越的子目錄許多文件

我現在試圖打包和發佈我的庫,它將被安裝在node_modules下。

在我看來,該節點分辨率算法(後面node_modules時),只允許一個單一的入口點(並沒有什麼彙總可以做的事情)

我希望能夠包括很多子目錄和文件,並單獨解決它們。

據我所知,我必須包括一個單一的頂層文件,其中包含所有export from機器。我只能導入該單個頂級文件。這意味着不得不手動創建該文件。這也意味着丟失來自目錄結構的所有子模塊名稱結構。

我想知道:有什麼辦法可以直接從node_module導入任何其他文件嗎?

回答

1

節點的分辨率算法只解決了一個模塊源的第一部分,因此,如果有人做這個...

var foo = require('your-library/subdir/foo.js'); 

...然後節點(或Browserify /的WebPack /彙總-插件節點,決心)將正確解析到

/path/to/project/node_modules/your-library/subdir/foo.js 

棘手的部分是要編寫的JavaScript模塊,但如果有人在節點中使用您的庫,然後他們需要CommonJS的模塊。 Rollup無法幫助您 - 您需要爲每個模塊執行一對一的ESM-> CJS轉換。所以這意味着要麼使用Babel,要麼首先創作CommonJS模塊。

+0

的確,這是正確的。我想補充一點,package.json不應該有一個主條目。 –