crypto.createHmac не определено после накопительного пакета - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь rollup код моей библиотеки в папку dist.
Сейчас у меня проблема со встроенной библиотекой crypto.

вывод терминала:

$ yarn run build
  ...
  lib/helpers/security.js
  createHmac is not exported by node_modules/rollup-plugin-node-builtins/src/es6/empty.js
  ...

Сводная конфигурация

...
plugins: [
  builtins(),
  resolve(),
  json(),
  babel({
    exclude: ['node_modules/**','**/*.json']
  })
]
...

Исходный код

Фрагмент из моего исходного кода:

// lib/helpers/security.js
import * as crypto from 'crypto'
crypto.createHmac('sha256',nonce).update(text).digest('base64');

Результат

От свернутый , связанный js выход:

undefined('sha256', nonce).update(text).digest('base64');

Исходный код Crypto.js

Для справки соответствующий оператор export в node/crypto.js ongithub показывает, что createHmac экспортируется.

node / crypto.js L147

Обновление 1 (решение?)

Похоже, что удаление import строка из security.js решает проблему.Я понимаю, что crypto является встроенным модулем узла.

Я хочу понять , почему Я не должен import в этом случае, в то время как примеры в документации делают импорт модуля.

Ответы [ 2 ]

0 голосов
/ 23 июня 2018

Так что это решение, которое я придумал, прекрасно работает для меня.

Установите rollup-plugin-node-builtins в вашем проекте как зависимость от разработчика.И импортируйте его в rollup.config.js:

import builtins from 'rollup-plugin-node-builtins'

Установите crypto в false при использовании builtins().По умолчанию используется версия commonjs от browserify.Это не то, что я хотел или нуждался.

// set crypto: false when using builtins()
...
builtins({crypto: false}),
...

Обязательно добавьте crypto к вашей external опции:

// add `crypto` to the `external` option
// you probably already have 
// one or more libs defined in there
let external = ['crypto']

Теперь я могу использовать crypto в моей библиотеке без предыдущих проблем при использовании моих встроенных файлов.

import { createHmac } from "crypto";

В результате получается модуль размером 4 КБ, который зависит от нескольких внешних зависимостей, без включения их во встроенные файлы.

Для контекста: мой исходный код написан на ES6, и я создаю три версии моего модуля: cjs, umd и es.

0 голосов
/ 11 июня 2018

Я бы не стал передавать файлы на стороне сервера, это можно сделать, но я предпочитаю этого не делать.Таким образом, вы, вероятно, не будете иметь ошибок, если будете использовать require () вместо import (импорт не встроен в Node.js v8):

var crypto = require("crypto");
...