2015-04-29 44 views
1

在不使用如下的相對路徑的情況下引用本地commonjs模塊的最佳實踐是什麼?編寫commonjs模塊並使用require來加載它(不使用相對路徑)

var custMod= require(‘customModule’); 
custMod(true); 
custMod.save(‘foo’); 

有沒有建立這樣的模塊的任何參考?

如果我寫了如下的模塊,當我調用custMode.save(12)時會得到undefined;

module.exports = customModule;function customModule(mode) { 
    var mode = 1; 
    return { 
    save: function (value) { 
     console.log(mode, value) 
    }, 
    get: function (id) { 
     console.log(mode, id) 
    } 
} 
+0

你問如何編寫一個注入全局變量的模塊?或者如何創建一個也具有自定義屬性的函數?什麼是你說的「這個」? –

+0

[編寫模塊化js](http://addyosmani.com/writing-modular-js/) –

+0

@FelixKling我在問寫入模塊,它注入全局變量,並且可以使用require函數加載。 – peterkr

回答

1

您可以添加路徑require使用

require.paths.push('/my/path'); 

require.main.paths.push('/my/path'); 

根據您的節點版本檢查。

那麼,如果customModule.js存在於/my/path/customModule.js,你可以只使用

require('customModule'); 

做筆記,雖然,你需要每天都這樣,你打算使用這種方法模塊。

+0

*「否則,您將需要npm鏈接或將您的模塊添加到NPM。」*不是真的。所有確實需要的是模塊位於包的'node_modules'文件夾中。 'npm'只是讓這個更方便。但是,是的,添加到npm變得更加實用,現在它提供了私有模塊。 –

+0

@FelixKling你是對的,刪除。我不認爲這是我正在尋找的東西,但是我可以發誓會有一個NPM-cli標誌將文件夾複製到'node_modules'中。 –

+0

是的,我認爲這就是npm鏈接會做的(它將模塊鏈接到當前包中)。我只是說你不需要*它(我想我太挑剔了;)) –

0

我希望節點更容易說實話。一種可能性:然後

project_root 
`--node_modules 
    |--npm-module-1 
    |--npm-module-2 
    |--... (etc) 
    `--lib 
     |--my-module.js 
     `--my-other-module.js 

通過以上你可以在你的項目中的任何位置鍵入require('lib/my-module')。 (只要確保永不安裝一個名爲lib的NPM模塊:)另一種可能性:

project_root 
|--node_modules 
| |--npm-module-1 
| |--npm-module-2 
| `--... (etc) 
`--lib 
    `--node_modules 
     |--my-module.js 
     `--my-other-module.js 

有了那麼上面你可以輸入require('my-module'),但僅限於project_root/lib/下的任何文件。

前一種方法的一個優點是,require('lib/my-module')可以一目瞭然地告訴哪些模塊對於項目是本地的。但後者更少打字。