![](/img/trans.png)
[英]is it possible to define a set function for module variables in node.js
[英]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
拉出是一个好/坏主意吗?
根据我的经验,在这种情况下通常要做的是:
something-else.js
文件,其中只包含require('src/something-else');
然后用户可以只require('my-module/something-else');
在这种情况下,您有一个更好的 API,这意味着将来对目录结构的任何更改都不会破坏您的用户代码。 即您可能将something-else
移动到my-module/other-sources/something-else
并且您只需要更改根文件并且您的用户代码仍然可以工作。my-module
,它需要您的模块可用的所有内容,然后用户可以通过myModule.somethingElse
选择模块的哪个部分否则,我还没有遇到明确设置源根的方法。 如果确实存在,该选项可能会很方便。
安装模块别名包:
npm i --save module-alias
像这样向package.json
添加路径:
{ "_moduleAliases": { "@lib": "app/lib", "@models": "app/models" } }
在您的入口点文件中,在任何require()
调用之前:
require('module-alias/register')
你现在可以要求这样的文件:
const Article = require('@models/article');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.