【问题标题】:How to export mutiple modules from a package?如何从一个包中导出多个模块?
【发布时间】:2016-06-15 17:49:04
【问题描述】:

我对节点很陌生,很可能这是一个非常简单的问题。

假设我有一个包裹mypackage。在我的包的package.json 中,我定义了main 键:

...
"main": "./dist/index.js",
...

dist 文件夹中还有一个名为tools.js 的模块

安装mypackage 后,我可以在该文件夹上运行节点,然后执行以下操作:

> require('mypackage')

效果很好。但是,当我尝试导入 tools 模块时,我遇到了这个问题:

> require('mypackage/tools')

Error: Cannot find module 'mypackage/tools'
    at Function.Module._resolveFilename (module.js:438:15)
    at Function.Module._load (module.js:386:25)
    at Module.require (module.js:466:17)
    at require (internal/module.js:20:19)
    at repl:1:1
    at REPLServer.defaultEval (repl.js:272:27)
    at bound (domain.js:280:14)
    at REPLServer.runBound [as eval] (domain.js:293:12)
    at REPLServer.<anonymous> (repl.js:441:10)
    at emitOne (events.js:101:20)

但是,如果我指定 dist 文件夹,它会起作用:

> require('mypackage/dist/tools')

但这不是我希望我的用户做的事情。如果我同时拥有srcdist 并且希望通过mypackage/otherMod 访问非主模块,我应该遵循什么项目结构?谢谢。

【问题讨论】:

    标签: node.js module npm package


    【解决方案1】:

    因为你还在父目录中。

    在“dist/index.js”里面你可以做

    process.chdir(__dirname);
    

    更新: 您可以使用 .在 index.js 里面做:

    require('./tools.js');
    

    【讨论】:

    • 第一种方法意味着导入我的包会自动更改节点进程的pwd,我认为这是一个坏主意。第二个可以工作,但tools 可以作为index 中的对象使用,我希望tools 作为单独的模块公开。
    猜你喜欢
    • 2019-12-22
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多