Итак, одна из вещей, которые мне больше всего нравятся в Node, это то, как вы можете использовать if( require.main === module )
, как объясняется в Документах Node , для записи файла, который можно использовать как в качестве автономного сценария, так и в качестве библиотека для других модулей, поэтому большинство моих файлов имеют следующую структуру c:
function InternalModule_FunctionName(){
// some function "global" to the module scope.
}
if( require.main === module ){
//"Executable" mode; calling InternalModule_FunctionName directly
InternalModule_FunctionName();
} else{
//Library mode; export InternalModule_FunctionName with a cleaner name.
exports.FunctionName = InternalModule_FunctionName;
}
Но я сталкиваюсь с проблемой при попытке использовать JSDo c в этой ситуации. В идеале я должен иметь возможность написать один комментарий к документации, чтобы охватить оба случая, поскольку InternalModule_FunctionName
и <module>.FunctionName
- это одна и та же функция, только с разными именами в зависимости от контекста использования модуля. Моя первая надежда состояла в том, чтобы иметь возможность указать как внешнее, так и внутреннее имя для функции, но это не представляется возможным в JSDo c. Это на первый взгляд идеальный сценарий для тега @alias, но, похоже, он тоже не работает, и я попробовал его всеми возможными способами. Я пробовал все возможные комбинации других тегов, которые, как я надеялся, могут помочь, например @borrows, @lends и так далее: все безрезультатно. В частности, моя первая попытка:
//#Global Variables
var Logger = {
log: () => {
return null;
}
};
/**
* @function Logger_Set
* @alias SetLogger
* @access public
* @description Allows this module's functions to log the given logger object.
* @param {?object} logger - The logger to be used for logging or `null` to disable logging.
* @throws {TypeError} `ERR_INVALID_ARG_TYPE` if logger is not an object or `null`.
* @since v0.0.0
*/
function Logger_Set( logger ){
var return_error = null;
const FUNCTION_NAME = 'Logger_Set';
//Variables
//Parametre checks
if( typeof(logger) === 'object' ){
if( logger === null ){
logger = {
log: () => {
return null;
}
};
}
} else{
return_error = new TypeError('Param "logger" is not an object.');
return_error.code = ERR_INVALID_ARG_TYPE;
throw return_error;
}
//Function
Logger = logger;
//Return
}
//#Exports and Execution
if(require.main === module){
} else{
/**
* @function SetLogger
*/
exports.SetLogger = Logger_Set;
}
дает мне (как уценка для краткости):
* [ModuleName](#module_ModuleName)
* [~Logger_Set(logger)](#module_ModuleName..Logger_Set)
* [~SetLogger()](#module_ModuleName..SetLogger)
<a name="module_ModuleName..Logger_Set"></a>
### ModuleName~Logger\_Set(logger)
Allows this module's functions to log the given logger object.
**Kind**: inner method of [<code>ModuleName</code>](#module_ModuleName)
**Throws**:
- <code>TypeError</code> `ERR_INVALID_ARG_TYPE` if logger is not an object or `null`.
**Access**: public
**Since**: v0.0.0
| Param | Type | Description |
| --- | --- | --- |
| logger | <code>object</code> | The logger to be used for logging or `null` to disable logging. |
<a name="module_ModuleName..SetLogger"></a>
### ModuleName~SetLogger()
**Kind**: inner method of [<code>ModuleName</code>](#module_ModuleName)
//#Global Variables
var Logger = {
log: () => {
return null;
}
};
/**
* @function Logger_Set
* @access public
* @description Allows this module's functions to log the given logger object.
* @param {?object} logger - The logger to be used for logging or `null` to disable logging.
* @throws {TypeError} `ERR_INVALID_ARG_TYPE` if logger is not an object or `null`.
* @since v0.0.0
*/
function Logger_Set( logger ){
var return_error = null;
const FUNCTION_NAME = 'Logger_Set';
//Variables
//Parametre checks
if( typeof(logger) === 'object' ){
if( logger === null ){
logger = {
log: () => {
return null;
}
};
}
} else{
return_error = new TypeError('Param "logger" is not an object.');
return_error.code = ERR_INVALID_ARG_TYPE;
throw return_error;
}
//Function
Logger = logger;
//Return
}
//#Exports and Execution
if(require.main === module){
} else{
/**
* @function SetLogger
* @alias Logger_Set
*/
exports.SetLogger = Logger_Set;
}
дает
## Functions
<dl>
<dt><a href="#Logger_Set">Logger_Set(logger)</a></dt>
<dd><p>Allows this module's functions to log the given logger object.</p>
</dd>
<dt><a href="#SetLogger">SetLogger()</a></dt>
<dd></dd>
</dl>
<a name="Logger_Set"></a>
## Logger\_Set(logger)
Allows this module's functions to log the given logger object.
**Kind**: global function
**Throws**:
- <code>TypeError</code> `ERR_INVALID_ARG_TYPE` if logger is not an object or `null`.
**Access**: public
**Since**: v0.0.0
| Param | Type | Description |
| --- | --- | --- |
| logger | <code>object</code> | The logger to be used for logging or `null` to disable logging. |
<a name="SetLogger"></a>
## SetLogger()
**Kind**: global function
//#Global Variables
var Logger = {
log: () => {
return null;
}
};
/**
* @function Logger_Set
* @access public
* @description Allows this module's functions to log the given logger object.
* @param {?object} logger - The logger to be used for logging or `null` to disable logging.
* @throws {TypeError} `ERR_INVALID_ARG_TYPE` if logger is not an object or `null`.
* @since v0.0.0
*/
function Logger_Set( logger ){
var return_error = null;
const FUNCTION_NAME = 'Logger_Set';
//Variables
//Parametre checks
if( typeof(logger) === 'object' ){
if( logger === null ){
logger = {
log: () => {
return null;
}
};
}
} else{
return_error = new TypeError('Param "logger" is not an object.');
return_error.code = ERR_INVALID_ARG_TYPE;
throw return_error;
}
//Function
Logger = logger;
//Return
}
//#Exports and Execution
if(require.main === module){
} else{
/**
* @name SetLogger
* @alias Logger_Set
*/
exports.SetLogger = Logger_Set;
}
дает
## Members
<dl>
<dt><a href="#SetLogger">SetLogger</a></dt>
<dd></dd>
</dl>
## Functions
<dl>
<dt><a href="#Logger_Set">Logger_Set(logger)</a></dt>
<dd><p>Allows this module's functions to log the given logger object.</p>
</dd>
</dl>
<a name="SetLogger"></a>
## SetLogger
**Kind**: global variable
<a name="Logger_Set"></a>
## Logger\_Set(logger)
Allows this module's functions to log the given logger object.
**Kind**: global function
**Throws**:
- <code>TypeError</code> `ERR_INVALID_ARG_TYPE` if logger is not an object or `null`.
**Access**: public
**Since**: v0.0.0
| Param | Type | Description |
| --- | --- | --- |
| logger | <code>object</code> | The logger to be used for logging or `null` to disable logging. |
//#Global Variables
var Logger = {
log: () => {
return null;
}
};
/**
* @function Logger_Set
* @access public
* @description Allows this module's functions to log the given logger object.
* @param {?object} logger - The logger to be used for logging or `null` to disable logging.
* @throws {TypeError} `ERR_INVALID_ARG_TYPE` if logger is not an object or `null`.
* @since v0.0.0
*/
function Logger_Set( logger ){
var return_error = null;
const FUNCTION_NAME = 'Logger_Set';
//Variables
//Parametre checks
if( typeof(logger) === 'object' ){
if( logger === null ){
logger = {
log: () => {
return null;
}
};
}
} else{
return_error = new TypeError('Param "logger" is not an object.');
return_error.code = ERR_INVALID_ARG_TYPE;
throw return_error;
}
//Function
Logger = logger;
//Return
}
//#Exports and Execution
if(require.main === module){
} else{
/**
* @name SetLogger
* @borrows Logger_Set as SetLogger
*/
exports.SetLogger = Logger_Set;
}
дает
## Members
<dl>
<dt><a href="#SetLogger">SetLogger</a></dt>
<dd></dd>
</dl>
## Functions
<dl>
<dt><a href="#Logger_Set">Logger_Set(logger)</a></dt>
<dd><p>Allows this module's functions to log the given logger object.</p>
</dd>
</dl>
<a name="SetLogger"></a>
## SetLogger
**Kind**: global variable
<a name="SetLogger.SetLogger"></a>
### SetLogger.SetLogger(logger)
Allows this module's functions to log the given logger object.
**Kind**: static method of [<code>SetLogger</code>](#SetLogger)
**Throws**:
- <code>TypeError</code> `ERR_INVALID_ARG_TYPE` if logger is not an object or `null`.
**Access**: public
**Since**: v0.0.0
| Param | Type | Description |
| --- | --- | --- |
| logger | <code>object</code> | The logger to be used for logging or `null` to disable logging. |
<a name="Logger_Set"></a>
## Logger\_Set(logger)
Allows this module's functions to log the given logger object.
**Kind**: global function
**Throws**:
- <code>TypeError</code> `ERR_INVALID_ARG_TYPE` if logger is not an object or `null`.
**Access**: public
**Since**: v0.0.0
| Param | Type | Description |
| --- | --- | --- |
| logger | <code>object</code> | The logger to be used for logging or `null` to disable logging. |
и десятки других перестановок тегов @function @property @name @alias @export @borrows @ все без какого-либо успеха .
Tl; dr : Как у вас есть функции с двумя разными именами, которые ссылаются на одну и ту же документацию?