我尝试在magento2结帐中覆盖js文件。
我要覆盖/vendor/magento/module-checkout/view/frontend/web/js/view/form/element/email.js
。
因此我将文件复制到模块中:
/app/code/GMyself/Test/view/frontend/web/js/view/form/element/email.js
我在/app/code/GMyself/Test/view/frontend/web/js/view/form/element/email.js
中做了一个小改动:
/**
* Callback on changing email property
*/
emailHasChanged: function () {
var self = this;
clearTimeout(this.emailCheckTimeout);
if (self.validateEmail()) {
quote.guestEmail = self.email();
checkoutData.setValidatedEmailValue(self.email());
$.cookie("checkoutemail", self.email()); // <--- this is the change
}
this.emailCheckTimeout = setTimeout(function () {
if (self.validateEmail()) {
self.checkEmailAvailability();
} else {
self.isPasswordVisible(false);
}
}, self.checkDelay);
checkoutData.setInputFieldEmailValue(self.email());
},
文件的其他部分不变。
然后我创建了/app/code/GMyself/Test/view/frontend/requirejs-config.js
:
var config = {
map: {
'*':
{
'Magento_Checkout/js/view/form/element/email.js':'GMyself_Test/js/view/form/element/email.js'
}
}
};
在更改代码或重新安装模块之后,我确实按此顺序运行了以下命令:
sudo mv pub/static pub/static_backup_`date +%Y%m%d_%H%m%S`
sudo /opt/local/bin/php71 -d memory_limit=4G ./bin/magento cache:flush
sudo /opt/local/bin/php71 -d memory_limit=4G ./bin/magento setup:upgrade;
sudo /opt/local/bin/php71 -d memory_limit=4G ./bin/magento cache:flush
sudo /opt/local/bin/php71 -d memory_limit=4G ./bin/magento setup:di:compile
我的Magento处于开发人员模式,因此无需执行setup:static-content:deploy
。但是我也尝试了deploy命令(带有-f
选项)。
该文件在pub/static/frontend/Magento/luma/en_US/GMyself_Test/js/view/form/element/email.js
中生成。
在结帐时,将加载原始文件,但不会加载我自己的email.js,因此不在我的浏览器的本地资源中(如我在Chrome Dev-Console中进行的检查)。
我的Chrome加载的全局生成的requirejs-config.js具有我在/app/code/GMyself/Test/view/frontend/requirejs-config.js
中所做的条目。
我在浏览器控制台中没有错误。
作为一个小测试,我还尝试用/vendor/magento/module-checkout/view/frontend/web/js/checkout-data.js
中的以下条目覆盖requirejs-config.js
:
var config = {
"map": {
'*':
{
checkoutData: 'GMyself_Test/js/checkout-data.js'
}
}
};
checkout-data.js
位于此处:
/app/code/GMyself/Test/view/frontend/web/js/checkout-data.js
。
结果与email.js文件相同。