编程语言
首页 > 编程语言> > Node.JS(新)Package.json exports 字段

Node.JS(新)Package.json exports 字段

作者:互联网

翻译自 Node.JS (New) Package.json Exports Field

听说过 export 映射吗?它相当强大!

总而言之

exports package.json 字段的文档在这里 ,它来自这个提案。我不会涵盖所有内容,因此如果您需要任何其他信息,请查看提案。
另外我没有涉及 importsESModule 世界中非常有趣的领域。

“exports” 是什么?

exports 字段(或 “export map”)提供了一种方法来为不同的环境和 JavaScript 风格公开您的包模块,同时限制对其内部部分的访问。
NodeJS浏览器 这样的环境,甚至是类似 node-env 的过滤器 production/development,例如 React 可以(或是否?)将它用于带有警告和内容的开发构建,以及它的生产构建。
EcmaScript 模块 import … from '…'CommonJS 之类的风味 const … = require(…)

如何使用它

考虑以下结构:

my-awesome-lib
├── lib/
│   ├── whole-lib.browser.js (iife 格式)
│   ├── public-module-a.cjs  (commonjs 格式)
│   ├── public-module-a.mjs  (esmodule 格式)
│   ├── public-module-b.cjs
│   ├── public-module-b.mjs
│   └── internals/
│       ├── private-module-c.cjs
│       └── private-module-c.mjs
├── package.json
└── …

我们想要导出 module-amodule-b 同时限制对 module-c. 我们还希望我们的包提供 CommonJSESModule 输出。

以下是如何利用该 exports 字段的示例

{
  "name": "my-awesome-lib",
  …
  "exports": {
    ".": {
      "browser": {
        "default": "./lib/whole-lib.browser.js"
      }
    },
    "module-a": {
      "import": "./lib/public-module-a.mjs",
      "require": "./lib/public-module-a.cjs"
    },
    "module-b": {
      "import": "./lib/public-module-b.mjs",
      "require": "./lib/public-module-b.cjs"
    }
  }
}

package.json | export field usage

注意:每个路径都应该相对于包根目录。意味着每条路径必须以 ./

通过提供有关我们的包的以下信息 my-awesome-lib,我们现在可以像这样在任何地方(受支持)使用它:

// CommonJS flavor
const moduleA = require('my-awesome-lib/module-a')

// ESModule flavor
import moduleA from 'my-awesome-lib/module-a'

// 行不通的!
const moduleA = require('my-awesome-lib/lib/public-module-a')
const moduleC = require('my-awesome-lib/internals/private-module-c')
import moduleA from 'my-awesome-lib/lib/public-module-a'
import moduleC from 'my-awesome-lib/internals/private-module-c'

JavaScript usage

在这两种风格中,请注意路径中没有:/lib/ 。 路径对应于我们在 exports 映射中声明的路径。

就是这样 !
我们到此结束。我没有介绍如何使用生产/开发导出,但是你明白了,你可以自己试验它

标签:Node,exports,lib,Package,awesome,module,json,my,public
来源: https://www.cnblogs.com/taohuaya/p/15573719.html