簡體   English   中英

是否可以設置節點模塊的根目錄?

[英]Is it possible to set the root directory of a node module?

如果我在src目錄中發布一個帶有源文件的節點模塊,並且人們想在他們的項目中導入一個文件,他們需要指定模塊的完整路徑。

示例:

結構:

my-module
--src
----index.js
----something-else.js

package.json :

{
  "name": "my-module",
  "root": "src/index.js"
}

實施:

import myModule from 'my-module';
import somethingElse from 'my-module/src/something-else';

(或使用require

var myModule = require('my-module');
var somethingElse = require('my-module/src/something-else');

有什么方法可以設置包,使其知道src是我的源根目錄,從而允許用戶使用my-module/something-else來要求somethingElse嗎?

如果這是不可能的,在預發布時將文件從src拉出是一個好/壞主意嗎?

根據我的經驗,在這種情況下通常要做的是:

  1. 在根目錄中有一個something-else.js文件,其中只包含require('src/something-else'); 然后用戶可以只require('my-module/something-else'); 在這種情況下,您有一個更好的 API,這意味着將來對目錄結構的任何更改都不會破壞您的用戶代碼。 即您可能將something-else移動到my-module/other-sources/something-else並且您只需要更改根文件並且您的用戶代碼仍然可以工作。
  2. 您創建一個核心my-module ,它需要您的模塊可用的所有內容,然后用戶可以通過myModule.somethingElse選擇模塊的哪個部分

否則,我還沒有遇到明確設置源根的方法。 如果確實存在,該選項可能會很方便。

可能的解決方案

別名

  1. 安裝模塊別名包:

     npm i --save module-alias
  2. 像這樣向package.json添加路徑:

     { "_moduleAliases": { "@lib": "app/lib", "@models": "app/models" } }
  3. 在您的入口點文件中,在任何require()調用之前:

     require('module-alias/register')
  4. 你現在可以要求這樣的文件:

     const Article = require('@models/article');

參考 :: https://gist.github.com/branneman/8048520

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM