Javascript:在内部导出模块内的内容

Mir*_*ili 5 javascript module export package-private npm

在 Java 中,我们有 4 个可见性级别。除了public和 之外private,我们还有protected级别和默认级别(没有修饰符),也称为“package-local”或“package-private”

修饰符 班级 包裹 子类 世界
民众
受保护的 X
无修饰符 X X
私人的 X X X

请参阅:https ://www.programcreek.com/2011/11/java-access-level-public-protected-private/


我特别需要 Javascript 中的“包私有”级别。Javascript 模块有类似的方法吗?

我正在编写一个库(NPM包),并且我想要export一些东西(functionclass等),但不在模块的公共 API 中(由库的使用者使用)。只是为了在我的模块文件之间本地使用。

Mir*_*ili 1

Node.js 有一个在“package.json”exports中定义的选项: https: //nodejs.org/api/packages.html#exports

它可以控制消费者可以导入哪些文件(以及如何导入)。它有很多选项,不幸的是上面的官方参考文献中没有记录这些选项。


例如,请参阅我的的“package.json”smart-color

"exports": {
  "./*" : "./lib/*",
  "./Color" : "./lib/Color.js",
  "./ColorCustomInspect" : "./lib/ColorCustomInspect.js",
  "./convertors" : "./lib/convertors.js",
  "./luminance" : "./lib/luminance.js",
  "./luminanceInverter" : "./lib/luminanceInverter.js",
  "./recolorFilter" : "./lib/recolorFilter.js",
  "./web-colors" : "./lib/web-colors.js"
},
Run Code Online (Sandbox Code Playgroud)

上述配置使消费者能够以这种方式访问​​该import文件:"./lib/Color.js"

import Color from 'smart-color/Color' // Not from '.../lib/Color[.js]'
Run Code Online (Sandbox Code Playgroud)

作为其他示例,请参阅package的“package.json”dotenvpackage的“package.json”server-only