【Solana】Anchorのビルドに失敗するとき
動作確認環境
- M1 Mac mini (macOS 12.3)
- @project-serum/anchor : 0.23.0
- webpack : 5.70.0
- process : 0.11.10
事象
Solanaのクライアント側で@project-serum/anchor
を使っていると、ビルドに失敗し以下のようなエラーに出くわすことがある。
Compiled with problems:
ERROR in ./node_modules/@project-serum/anchor/dist/browser/index.js 12:0-28
Module not found: Error: Can't resolve 'assert' in '<your project path>/node_modules/@project-serum/anchor/dist/browser'
BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.
If you want to include a polyfill, you need to:
- add a fallback 'resolve.fallback: { "assert": require.resolve("assert/") }'
- install 'assert'
If you don't want to include a polyfill, you can use an empty module like this:
resolve.fallback: { "assert": false }
また、エラー文で示されているようにassert
パッケージをインストールしても正常にページが表示されない。
原因
@project-serum/anchor
は内部でNode.jsのネイティブモジュールを使用しているが、webpack 5以降はNode.jsのpolyfillsが削除されたため、素直にビルドができなくなってしまった。
ちなみに、react-script
なども内部でwebpackを使用しているため同じような事象が起こる。
対処方法
webpackのバージョンを4に落としてもいいのだが、それはそれで別の問題が発生する可能性あるため、ここではwebpackのプラグインを使って対処する。react-script
を使用する場合のうまい対処方法は分からなかった。(ご存知の方いたら教えて下さい)
必要なパッケージをインストール
npm install assert process
webpack.config.js にプラグイン設定を追加
const webpack = require('webpack');
module.exports = {
...
plugins: [
new webpack.ProvidePlugin({
process: 'process/browser',
Buffer: ['buffer', 'Buffer'],
}),
],
};
参考
Author And Source
この問題について(【Solana】Anchorのビルドに失敗するとき), 我々は、より多くの情報をここで見つけました https://qiita.com/derodero24/items/fa4d84f158f0c5ba7d0f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .