ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-11-18 18:33:22  阅读:233  来源: 互联网

标签:Node exports lib Package awesome module json my public


翻译自 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有