В настоящее время я создаю простой SDK, который компилирую с babeljs , и устанавливаю в качестве зависимости в моем основном js-приложении.Основное js-приложение - это децентрализованное приложение, построенное на ethereum и metamask , поэтому оно опирается на поставщика web3, подключенного к объекту глобального окна при загрузке страницы.
Основное приложение работает нормально уже несколько месяцев.Но когда мне требуется в SDK, основное приложение ломается.Точнее говоря, когда SDK просто требует более новую версию Web3.js, он, по какой-то причине, перезаписывает объект web3 в окне браузера.
Есть ли плагин babel, который я могу использовать для решения этой проблемы?Ниже приведены фрагменты кода:
ЭТО РАБОТАЕТ: SDK:
export default class Example {};
ОСНОВНОЕ ПРИМЕНЕНИЕ:
import Example from 'example-sdk';
window.web3.eth.accounts[0];
// returns '0x4djfs...'
ЭТО ПЕРЕРЫВЫ: SDK:
import Web3 from 'web3'; // <<<<< THIS LINE BREAKS THE MAIN APP
export default class Example {};
ОСНОВНОЕ ПРИМЕНЕНИЕ:
import Example from 'example-sdk';
window.web3.eth.accounts[0];
// error gets thrown, implying the window.web3 version is newer than the one that should be written to the window by metamask
Вот мой .babelrc:
{
"presets": ["@babel/env"],
"plugins": ["@babel/plugin-transform-runtime"]
}
А вот мой package.json (все обычные devDependencies
являются обычными dependencies
в этом репо, так как это SDKи для репозитория, устанавливающего SDK, понадобятся следующие пакеты):
{
"main": "lib/index.js",
"scripts": {
"test": "npm test",
"build": "babel src -d lib",
"lint": "eslint ./src; exit 0",
"postinstall": "npm run build"
},
"license": "ISC",
"devDependencies": {
"babel-eslint": "^8.2.6",
"eslint": "^4.19.1",
"eslint-config-airbnb-base": "^13.1.0",
"eslint-plugin-import": "^2.14.0"
},
"dependencies": {
"@babel/polyfill": "^7.0.0",
"@babel/plugin-transform-modules-commonjs": "^7.1.0",
"@babel/runtime": "^7.0.0",
"@babel/core": "^7.1.0",
"@babel/plugin-transform-runtime": "^7.1.0",
"@babel/cli": "^7.0.0",
"@babel/preset-env": "^7.0.0-rc.1",
"isomorphic-unfetch": "^3.0.0",
"truffle-contract": "^4.0.0-beta.0",
"web3": "^1.0.0-beta.36"
}
}
Любые советы будут очень признательны