Rollup.js: неопределенные объекты во внешних зависимостях

Недавно я начал играть с rollupjs. После настройки всего в соответствии с доступными документами и объединения вещей я получил много ошибок из моих внешних библиотек о неопределенных объектах. Такие ошибки: Cannot read property 'parse' of undefined исходят от crypto-js. Он жалуется на эту строку в коде: var ciphertext = Base64.parse(openSSLStr). Итак, Base64 не определено. У меня есть несколько подобных ошибок из разных внешних библиотек.

Я использую несколько внешних зависимостей: chart.js, crypto-js, мифрил, момент, множественное число.

Все они отлично работают с jspm. Я решил попробовать свернуть, чтобы ускорить процесс, так как jspm на данный момент очень медленный. Теперь половина моих внешних зависимостей перестала работать. Я получаю ошибки типа «неопределенные вещи» и «... не функция», поступающие только из внешних библиотек.

Что может быть причиной этого?

Это мой rollup.config.js

import babel from 'rollup-plugin-babel';
import npm from 'rollup-plugin-npm';
import commonjs from 'rollup-plugin-commonjs';
import uglify from 'rollup-plugin-uglify';

    export default {
      entry: 'app/scripts/application/main.js',
      format: 'cjs',
      plugins: [
        npm({
          jsnext: true,
          main: true,
        }),
        babel({
          exclude: 'node_modules/**',
          presets: [ 'es2015-rollup' ],
        }),
        commonjs(),
        uglify(),
      ],
      dest: 'static/js/application.js',
    };

Дайте мне знать, если нужны какие-либо другие подробности.

Спасибо.

ИЗМЕНИТЬ

Я сделал простой тест-репродукцию, объединив те библиотеки, которые вызывают ошибки в моем приложении.

пакет.json

{
  "name": "minion",
  "private": true,
  "babel": {
    "presets": [
      "es2015-rollup"
    ]
  },
  "dependencies": {
    "chart.js": "^1.0.2",
    "crypto-js": "^3.1.6",
    "mithril": "^0.2.2-rc.1",
    "moment": "^2.11.1",
    "pluralize": "^1.2.1"
  },
  "devDependencies": {
    "babel-preset-es2015-rollup": "^1.1.1",
    "rollup-plugin-babel": "^2.3.9",
    "rollup-plugin-commonjs": "^2.2.0",
    "rollup-plugin-npm": "^1.3.0",
    "rollup-plugin-uglify": "^0.1.0"
  }
}

rollup.config.js

import babel from 'rollup-plugin-babel';
import npm from 'rollup-plugin-npm';
import commonjs from 'rollup-plugin-commonjs';
import uglify from 'rollup-plugin-uglify';

export default {
  entry: 'app/main.js',
  format: 'cjs',
  plugins: [
    npm({
      jsnext: true,
      main: true,
    }),
    babel({
      exclude: 'node_modules/**',
      presets: [ 'es2015-rollup' ],
    }),
    commonjs(),
    //uglify(),
  ],
  dest: 'static/js/app.js',
}

main.js

import Application from './application'
import pluralize from 'pluralize'


var text = Application.run()

console.log(`Testing encryption: ${text}`)
console.log(`Testing pluralization: ${pluralize('person')}`)

приложение.js

import crypt from 'crypto-js'

var Application = {
    run() {
      var ciphertext = crypt.AES.encrypt('Testing encryption...', 'password')
      var bytes  = crypt.AES.decrypt(ciphertext.toString(), 'password')
      return bytes.toString(crypt.enc.Utf8)
    }
}

export default Application

Выполнение вышеуказанного приведет к ошибкам.


person r.sendecky    schedule 24.01.2016    source источник
comment
Можете ли вы произвести минимальную репродукцию? Я попробовал здесь, но безуспешно — не зная причины ошибки, трудно исследовать. Я предполагаю, что это связано с циклическими зависимостями в модулях CommonJS, с которыми плагин commonjs в настоящее время может не справиться.   -  person Rich Harris    schedule 24.01.2016
comment
Я создал простой тест, который воспроизводит ошибки связывания. Я обновил свой вопрос. Спасибо.   -  person r.sendecky    schedule 25.01.2016
comment
@r.sendecky есть новости по этому вопросу?   -  person eko    schedule 17.02.2017
comment
Я воспроизвел эту проблему с доступными на тот момент версиями пакетов, затем обновил их все до последней версии и больше не смог воспроизвести — скрипт запустился и выдал ожидаемый результат. Кажется, это было исправлено.   -  person Permutator    schedule 16.05.2017


Ответы (1)


Просто предположение: возможно, это ошибка накопительного пакета и / или криптографии.

У меня аналогичная ошибка при попытке запустить функцию js в Node Red, js в порядке, когда я запускаю ее локально, но выдает TypeError: Cannot read property 'split' of undefined при удаленном запуске.

Единственное, что общего у моего кода с вашим, это то, что оба используют криптографию, в частности накопительный пакет crypto-js 3.1.2 «hmac-sha256.js», и код не импортируется, а является необработанным.

Даже после удаления единственного экземпляра «split», но я не могу его решить (но продолжает работать локально)

person Juan Lopez    schedule 05.10.2017