Правильно собрать и импортировать пользовательскую библиотеку - PullRequest
0 голосов
/ 28 января 2019

Я создаю свою собственную библиотеку полезных функций, которые я использую между проектами.Для этого я решил создать приватные пакеты NPM @name/package.

. Проблема возникает, когда я пытаюсь импортировать ее в мое приложение CRA.Сервер правильно компилируется (в CLI), но при посещении страницы выдает ошибку Unhandled Rejection (TypeError): Object(...) is not a function.Я использую babel для компиляции, используя конфигурацию ниже.

Babel config

{
    presets: ["@babel/env", "@babel/react"]
}

Package.json

{
  "main": "./dist/index.js",
  "module": "./src/index.js",
  "files": [
    "src/**/*",
    "dist/**/*"
  ],
}

src / index.js

export { default as mapObject} from "./mapObject";

src / mapObject.js

export default function mapObject(object, callback) {
    return Object.keys(object || {}).map(key => callback(key, object[key]));
}

dist / index.js (составлено babel)

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});

Object.defineProperty(exports, "mapObject", {
  enumerable: true,
  get: function get() {
    return _mapObject.default;
  }
});

var _mapObject = _interopRequireDefault(require("./mapObject"));

dist / mapObject.js

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = mapObject;

function mapObject(object, callback) {
  return Object.keys(object || {}).map(function (key) {
    return callback(key, object[key]);
  });
}

Импортfile

// Causes error when loading in the browser
import { mapObject } from "@name/package";
import { mapObject } from "@name/package/src";
import { mapObject } from "@name/package/dist";

// Doesn't cause an error
import mapObject from "@name/package/dist/mapObject";
import mapObject from "@name/package/src/mapObject";

Я проверил несколько других библиотек, и для меня нет различий в процессе сборки / импорта.

1 Ответ

0 голосов
/ 29 января 2019

Таким образом, приведенный выше код на самом деле правильный, но я ошибся, когда тестировал его, не копируя новые папки src и dist ...

...