Solidity

可以在我的 React 應用程序中將“OpenZeppelin 契約”作為開發依賴項嗎?

  • May 1, 2022

我正在嘗試減少 React 應用程序的包大小。我在項目建構管道期間部署了一個智能合約。合約需要位於 React 應用程序的項目文件夾中,以便它可以訪問合約 ABI。所以我在依賴項中有這個:

"dependencies": {
 ...
 "@openzeppelin/contracts": "^4.3.2",
 ...
}

如果我把它移到devDependencies.,我的 Solidity 智能合約(如果重要的話,^0.8.11)仍然可以編譯和部署yarn hardhat run path/to/deploy.js. 我擔心 OpenZeppelin 的功能可能無法正常工作。他們的文件說執行$ npm install @openzeppelin/contracts,沒有--save-dev-D

我只是想知道,如果一切都可以作為 devDependency 正常工作,他們為什麼要說將其設為非 devDependency?也許它實際上並沒有按預期工作,我只是不認為Ownable它不起作用。有誰知道我是否可以安全地將 OpenZeppelin 依賴項放在 devDependencies 中而不會產生不可預見的後果?

謝謝你的幫助。

簡短的回答

應該是安全的。這取決於您如何建構契約建構步驟,但很有可能您會沒事的。

長答案

這個問題真的歸結為“dependencies和之間有什麼區別devDependencies?” 這個答案在解釋差異方面做得很好,但我會強調重要的部分並解釋它們與您的問題的關係。

dependencies安裝軟體包時始終安裝,但devDependencies並不總是安裝。有兩種devDependencies未安裝的常見情況:(1)從外部位置(例如在另一個包中或遠端)安裝包時,(2)在安裝包時(在任何情況下)使用--productionor NODE_ENV=production— 生產環境變數是通常由部署時的框架設置。

那麼這意味著@openzeppelin/contracts什麼呢?好吧,如果你只是在本地編譯你的合約,或者你的編譯步驟只是作為你的開發工具的一部分發生,那麼你可能不需要擔心devDependencies沒有被安裝(除非你正在做一些時髦的事情)。如果您的合約編譯步驟是 CI/CD 的一部分,那麼您可能需要擔心:您應該檢查設置了哪些環境變數;很可能你仍然不會有任何問題。如果您在部署平台上在執行時編譯合約,那麼您可能會遇到問題。

但這可能無關緊要(如果您使用的是 Webpack 或類似的)

查看這篇博文,devDependenciesvsdependencies可能不會影響您的生產版本的大小。您可能正在使用 Webpack 或類似的打包程序來建構您的項目,它會自動忽略執行時實際不需要的任何依賴項。

引用自:https://ethereum.stackexchange.com/questions/127257