Terms of the deal weren't released but MLB.com reported it was worth $5 million with incentives that could pay him as much as $13 million.
Napoli was originally set to sign a three-year contract for $39 million with Boston in early December, but the transaction was delayed and then revised after a physical examination revealed he has a hip condition known as avascular necrosis.
Napoli belted 24 homers and drove in 56 RBI over 108 games last season for the Texas Rangers, earning his first All-Star Game selection, but managed just a .227 batting average.
The 31-year-old has compiled a .259 average with 146 homers and 380 RBI over 727 career games with the Los Angeles Angels and Texas.
Theater accidentally screens 'Nymphomaniac' trailer instead of Disney's 'Frozen'
Texas principal bans speaking Spanish, stirs controversy