节点:如何扩展 module.paths

node: how to extend module.paths

我需要通过 require 访问我的自定义静态文件。 因此,我创建了一个目录 'assets' 并将其提升到 package:

|-assets
|    |-default-asset.json
|    |-package.json

其中 package.json 看起来像这样:

{
  "name": "assets",
  "version": "1.0.0",
  "main": "./default-asset.json"
}

我需要将 "main" 属性 设置为包中存在的内容,以免被节点忽略。然而,现在这个包是 node_modules 库根目录的一部分。

但是当我调用节点检查时 module.paths 它仍然没有列出:

(base) ➜  server git:(master) ✗ node
Welcome to Node.js v12.13.1.
Type ".help" for more information.
> module.paths
[
  '/.../server/repl/node_modules',
  '/.../server/node_modules',
  '/.../node_modules',
  '/user/node_modules',
  '/home/node_modules',
  '/node_modules',
  '/home/user/.node_modules',
  '/home/user/.node_libraries',
  '/usr/lib/node'
]
> 

这可能是个问题,因为在尝试从文件夹中获取其中一个文件时,我仍然遇到异常:

internal/modules/cjs/loader.js:800
    throw err;
    ^

Error: Cannot find module './assets/default-asset.json'
Require stack:
...

是的,我终于设法修复了它,对于任何其他遇到此问题的人来说,方法如下:

  1. 需要从 app/package.json 和
  2. 中引用自定义包
  3. 更重要的是,来自带有 "version": "file:custom-assets" 注释的 package-lock.json!
  4. package.json 必须包含一个 "main" 条目,该条目引用其中一个文件,其路径必须以 ./ 开头!!!
  5. 资产的使用不能以./开头,而是/!!!

现在路径就在那里:

$ node 
> module.paths
[
  '.../important-code-snippets/JavaScript/require-custom-assets/repl/node_modules',
  '.../important-code-snippets/JavaScript/require-custom-assets/node_modules',

这里还有一个完整的 运行 示例:https://github.com/Macilias/important-code-snippets/tree/master/JavaScript/require-custom-assets