Currently, JS has provided mnemonic, private key, public key, address generation method, which is convenient for app-side developers to use.
# 1 Generate Mnemonic
const bip39 = require('bip39');
let mnemonicWords = await bip39.generateMnemonic();
console.log('createMnemonicWords', mnemonicWords);
# 2 Generate PrivateKey through Mnemonic
let seed = await bip39.mnemonicToSeed(mnemonicWords);
let hdWallet = hdkey.fromMasterSeed(seed);
let key1 = hdWallet.derive("m/44'/60'/0'/0/0");
let privateKey = '0x' + key1._privateKey.toString('hex');
console.log('privateKey', privateKey);
# 3 Generate PublicKey through PrivateKey
var util = require('ethereumjs-util');
let publicKey = util.bufferToHex(util.privateToPublic( util.toBuffer(privateKey)));
console.log('publicKey', publicKey)
# 4 Generate Address through PublicKey
var util = require('ethereumjs-util');
var address = util.pubToAddress(util.toBuffer(publicKey), true);
// base BIP55 contract to encode address again
address = util.toChecksumAddress('0x' + address.toString('hex'));
console.log('address', address)