package.json中的根目录

Dra*_*cir 55 javascript node.js npm package.json

我的问题涉及我希望作为NPM模块发布的现有库.该库已在使用中,目前require通过本地文件系统.

如何指定模块文件的根目录?

如果我有一个像这样的结构:

.
??? package.json
??? src
|   ??? js
|   ??????? lib
|   ?????????? my
|   ?????????????? thing.js
|   ?????????????? that.js
Run Code Online (Sandbox Code Playgroud)

如何指定模块的根目录和可访问的文件src/js/lib/my/

我想从外部项目中使用如下:

var thing = require('my/thing'),
    that = require('my/that');
Run Code Online (Sandbox Code Playgroud)

"files"在package.json中看到了这个属性,这是正确的方法吗?

小智 11

对于本机解决方案,请参阅此节点问题https://github.com/nodejs/node/issues/14970

功能请求建议mainDir在main旁边的package.json中有一个字段.

投票的人越多,实施的速度越快/越可能

  • **Node 16 弃用警告**:*DeprecationWarning:在包的“exports”字段模块解析中使用已弃用的文件夹映射“./”。更新此 package.json 以使用子路径模式,例如 `"./*"`.* (4认同)
  • “出口”很棒,尽管它是最近才落地的。显然在节点“12.16.0”中没有“--experimental-exports”标志;参考文献:https://github.com/nodejs/node/pull/31691 和 https://github.com/nodejs/node/pull/29867。TypeScript 支持仍在进行中;参考:https://github.com/microsoft/TypeScript/issues/33079 (2认同)

Yan*_*and 8

正如文件所说:

主要字段是模块ID,它是程序的主要入口点.

所以你"main": "src/js/lib/my/app.js"在package.json文件中会有类似的东西.

我建议你创建一个app.js文件和module.exports你不同的孩子.例如:

 module.exports.thing = require('./thing');
 module.exports.that = require('./that');
Run Code Online (Sandbox Code Playgroud)

并像这样使用它们:

var mylib = require('mylib')
  , thing = mylib.thing
  , that = mylib.that;
Run Code Online (Sandbox Code Playgroud)

  • 我的包是一个已经存在的库,我无法改变结构.我只需要NPMify我的库. (7认同)
  • 为什么在`package.json`中添加条目而不更改lib,但添加index.js是?这应该是公认的答案. (2认同)

Jer*_*NER 6

package.json主要是用于npm安装和管理依赖项的文件。

require构造不太关心,package.json因此您将无法使用它来破坏require工作方式并使其相信包不在require加载方案期望的位置。

请参阅https://nodejs.org/api/modules.html上的文档和此处的加载方案:https : //nodejs.org/api/modules.html#modules_all_together

您可以使用文档中称为“从全局文件夹加载”的技术并定义NODE_PATH环境变量。

但我建议您坚持使用更标准的方式: - 将模块放在 node_modules 目录中 - 或者在 app.js 或 index.js 所在的同一目录中启动模块层次结构

  • 这是我想*发布*的模块 (2认同)