4

最近、rollupjs を使い始めました。利用可能なドキュメントに従ってすべてを構成し、まとめた後、未定義のオブジェクトに関する外部ライブラリから多くのエラーが発生しました。この種のエラー: Cannot read property 'parse' of undefinedcrypto-js から来ています。コード内の次の行について不平を言います: var ciphertext = Base64.parse(openSSLStr). 未定義Base64も同様です。バンドルされているさまざまな外部ライブラリから、このようなエラーはほとんどありません。

いくつかの外部依存関係を使用します: chart.js、crypto-js、mithril、moment、pluralize

それらはすべて と完全に連携し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

上記を実行するとエラーが発生します。

4

1 に答える 1

0

推測するだけです:ロールアップや暗号のバグかもしれません。

Node Red で js 関数を実行しようとすると同様のエラーが発生します。ローカルで実行すると js は問題ありませんがTypeError: Cannot read property 'split' of undefined、リモートで実行するとスローされます。

私のコードとあなたのコードの唯一の共通点は、どちらも暗号化、具体的には crypto-js 3.1.2 ロールアップ「hmac-sha256.js」を使用していることと、コードがインポートされていないことです。

「分割」の唯一のインスタンスを削除した後でも、まだ解決できません(ただし、ローカルで実行し続けます)

于 2017-10-05T18:50:59.063 に答える