2015-05-27 5 views
1

При работе над многими различными проектами Node.js у меня начался общий код, который я хочу переместить в новом пакете Node.js, чтобы не переписывать один и тот же код несколько раз. У меня есть новый модуль Node.js, и я использую его в своих проектах, используя npm link.Структура модуля утилиты Node.js

Теперь я немного смущен относительно того, как структурировать эту общую библиотеку, чтобы правильно ее модулировать. Это то, что я сейчас в моей общей библиотеке:

// "my-common-lib"'s app.js 

module.exports = { 
    math: require("./math/mathLib"), 
    network: require("./network/networkLib") 
}; 

-

//mathLib.js 
exports.pi = 3.14; 

Это работает, я могу сделать следующее в другом проекте Node.js:

var commonLibrary = require("my-common-lib"); 
var commonMath = commonLibrary.Math; 

console.log("Pi: " + commonMath.pi); 

Хотя это решает проблему, я бы предпочел нечто похожее на то, как это делают lodash:

var commonMath = require("my-common-lib/math"); 

console.log("Awesome pi: " + commonMath.pi); 

Я не могу понять, как это делает lodash, и я бы definitely like to avoid having a humongous main js file.

TL; DR Я хочу модулизовать модуль node.js, поэтому я могу потребовать подмодули (require("my-common-lib\myCommonMathLib")), как я могу это сделать?

ответ

2

lodash делает это со специальной модульной сборкой. Посмотрите, например, на ES6 build. Каждый «подпроект» имеет выделенный модуль в выделенном файле .js. Агрегирующий файл (lodash.js) просто импортирует все остальные модули.

Если вы хотите красивое соглашение lib/module, просто получите свой файл lib.js (агрегатор) на верхнем уровне, рядом с каталогом того же имя, где все внутренние модули сохраняются.

Другим вариантом для require("lib") части должны иметь конфигурацию "main": "lib.js" в вашем package.json

2

Если вы хотите использовать lodash/array, например, LoDash имеет array.js файл со следующим:

module.exports = { 
    'chunk': require('./array/chunk'), 
    'compact': require('./array/compact'), 

Таким образом, вы можете легко math.js в основной папке, которая имеет что-то вроде:

module.exports = { 
    pi: 3.14 
    // OR 
    pi: require('./math/pi'); // and have file pi.js inside math folder 
} 

Таким образом, вы можете использовать его как короткий:

var math = require('my-common-lib/math'); 
math.pi; // 3.14 
Смежные вопросы