通过package.json名称导入当前包导出

Don*_*ato 6 javascript testing import package.json

我很想知道是否有一个约定允许人们从包内测试包的预期用法。考虑以下 package.json:

{
   "name": "@place/fn",
   "version: "1.0.0"
}
Run Code Online (Sandbox Code Playgroud)

这个包中,我想要一个test.js文件,其中包含以下代码:

import mainThing, { anotherThing } from '@place/fn';
Run Code Online (Sandbox Code Playgroud)

使用正确的目录结构或 package.json 配置可以实现这一点吗?我也很喜欢 CommonJS 语法,如果它能更好地工作的话。

Don*_*ato 4

好的,找到了这个问题的答案,但我在这个过程中发现了很多其他相关的东西,可能会对其他人有所帮助。

首先,现在我明白我想要做的是将当前包安装为本地依赖项这可以通过使用此答案package.json中找到的以下语法来完成。

{
  "name": "@place/fn",
  "dependencies": {
    "@place/fn": "file:./"
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,我可以运行npm i来安装该更改并编写以下测试文件:

import mainThing, { anotherThing } from '@place/fn';
Run Code Online (Sandbox Code Playgroud)

运行测试文件时,导入将如同安装到另一个包中一样;更好地模仿预期用途。


我发现的另一件事是,您可以使用此答案中找到的语法为从 npm 安装的软件包添加别名。

"dependencies": {
  "case-1.5.3": "npm:case@^1.5.3",
  "kool": "npm:case@^1.6.1"
}
Run Code Online (Sandbox Code Playgroud)

然后您可以执行以下操作:

let Case = require('case-1.5.3');
let Kool = require('kool');
Run Code Online (Sandbox Code Playgroud)

最后,我发现的另一件事是Node@13 允许在该答案package.json中找到映射目录的新键。还有其他软件包(例如)可以执行类似的操作,最大的区别是已安装的解决方案(即:)只能在您正在使用的软件包中工作。似乎新的键将进行映射以便在其他包中使用。module-aliasmodule-aliasexportspackage.json

// ./node_modules/es-module-package/package.json
{
  "name": "es-module-package",
  "exports": {
    "./my/": "./src/js/lib/my/"
  }
}

import thing from 'es-module-package/my/thing.js';
// Loads ./node_modules/es-module-package/src/js/lib/my/thing.js
Run Code Online (Sandbox Code Playgroud)

所有这一切的最终目的是测试我在包外部提供的语法样式是否可以从包内部进行测试,而不是安装到另一个包中并在那里进行测试。现在我可以检查常见的 lodash 导入语法是否适用于我的包。

import get from 'lodash/get'
Run Code Online (Sandbox Code Playgroud)

(我希望我知道术语是什么,要求一个干净的,也许是别名的包路径,而不是解构主导出。)