最近、rollupjs を使い始めました。利用可能なドキュメントに従ってすべてを構成し、まとめた後、未定義のオブジェクトに関する外部ライブラリから多くのエラーが発生しました。この種のエラー: Cannot read property 'parse' of undefined
crypto-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
上記を実行するとエラーが発生します。