The first chance of the game fell to the hosts when George Cooper’s cross was deflected to Porter, but his header was blocked away for a corner.
14 minutes in and George Cooper attempted an ambitious half way line lob after spotting Stephens off of his line, but the shot went over.
Further half chances came and went for the Railwaymen, with efforts from Dagnall, Pickering and Walker before the Bees registered their first shot on target in the 33rd minute.
Shaq Coulthirst was fouled but the referee played advantage as the ball fell to Jamal Campbell-Ryce.
JCR brought the ball forward before testing Garratt with a low strike, but he was equal to the effort.
After the restart, Mauro Vilhete came close with a free kick from a tight angle. The whip on the delivery caught out the Crewe ‘keeper and the ball struck the upright before bouncing clear of danger.
In the 70th minute, the ball fell to Dagnall unmarked in the penalty area but Stephens spectacularly tipped his volley over the bar.
The only goal of the game came in the 75th minute when Chris Porter latched onto the end of substitute Bakayogo’s low cross to give the hosts the advantage.
With 5 minutes to play, Stephens yet again denied Dagnall from close range before Crewe resorted to running down the clock by the corner flag.
In the final minute of stoppage time, Jack Taylor hooked a ball into the box from deep. It just cleared the heads of the Crewe defence before falling to Michael Nelson who placed is effort wide of the post.
Barnet: Stephens, Clough, Santos, Nelson, Weston (J. Taylor, 54′), Campbell-Ryce (Fonguck, 66′), Coulthirst (Akinola, 75′), Tutonda, H. Taylor, Vilhete, Akpa Akpro.
Unused subs: Ross, Bover, Smith, Amaluzor.