是否可以设置节点模块的根目录?

时间:2016-05-30 08:01:17

标签: javascript node.js npm

如果我在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是我的源根目录,允许用户somethingElse my-module/something-else需要?{/ p>

如果无法做到这一点,那么在预发布时将文件从src中拉出来是不是一个好/坏主意?

2 个答案:

答案 0 :(得分:2)

根据我的经验,在这个例子中通常做的是:

  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
  3. 选择模块的哪个部分

    否则,我没有遇到明确设置源根的方法。如果确实存在,该选项可能很方便。

答案 1 :(得分:0)

可能的解决方案

别名

  1. 安装 module-alias 包:

    while(strcmp(candidates[i].name, name) == 0) 
    {
    }
    
  2. 像这样向您的 while(strcmp(candidates[i].name, name) == 0) ; 添加路径:

    npm i --save module-alias
    
  3. 在您的入口点文件中,在任何 package.json 调用之前:

    {
        "_moduleAliases": {
            "@lib": "app/lib",
            "@models": "app/models"
        }
    }
    
  4. 您现在可以要求这样的文件:

    require()

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