импортировать текущий пакет экспорт по пакету. json имя - PullRequest
0 голосов
/ 12 февраля 2020

Мне интересно знать, существует ли соглашение, позволяющее человеку проверить ожидаемое использование пакета из пакета. Рассмотрим следующий пакет. json:

{
   "name": "@place/fn",
   "version: "1.0.0"
}

Начиная с в этом пакете , я хотел бы иметь файл test.js, с точно следующий код:

import mainThing, { anotherThing } from '@place/fn';

Возможно ли это с правильной структурой или пакетом каталогов. json конфигурация? Я также в порядке с общим синтаксисом JS, если это будет работать лучше.

1 Ответ

0 голосов
/ 13 февраля 2020

Хорошо, я нашел ответ на этот вопрос, но в процессе я нашел массу других связанных вещей, которые, вероятно, могли бы помочь другим.

Во-первых, теперь я понимаю, что я хотел сделать, это установить текущий пакет. как локальная зависимость . Это можно сделать в package.json, используя следующий синтаксис, найденный в в этом ответе .

{
  "name": "@place/fn",
  "dependencies": {
    "@place/fn": "file:./"
  }
}

Теперь я могу запустить npm i, чтобы установить это изменение, и кодировать следующий тест file:

import mainThing, { anotherThing } from '@place/fn';

При запуске тестового файла импорт будет действовать так, как если бы он был установлен в другой пакет; лучше имитировать предполагаемое использование.


Еще одна вещь, которую я обнаружил, заключается в том, что вы можете создавать псевдонимы пакетов, установленных из npm, используя синтаксис, найденный в в этом ответе .

"dependencies": {
  "case-1.5.3": "npm:case@^1.5.3",
  "kool": "npm:case@^1.6.1"
}

Что затем позволяет сделать следующее:

let Case = require('case-1.5.3');
let Kool = require('kool');

И, наконец, еще одна вещь, которую я обнаружил, заключается в том, что Node@13 позволяет для нового ключа на package.json, который отображает каталоги, найденные в этом ответе . Существуют другие пакеты (например, module-alias), которые делают что-то похожее, с большой разницей в том, что установленные решения (ie: module-alias) работают только из пакета, с которым вы работаете. Кажется, что новая клавиша exports на package.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

В конечном итоге цель всего этого состояла в том, чтобы проверьте, что стиль синтаксисов, которые я предоставляю вне пакета, можно проверить изнутри пакета вместо его установки в другой пакет и тестирования там. Теперь я могу проверить, что для моего пакета работает общий синтаксис импорта loda sh.

import get from 'lodash/get'

(я знал sh Я знал, какова терминология, требующая чистого, возможно, псевдонимного пути пакет вместо деструкции основного экспорта.)

...