Ionic build failing on OS X 10.11.6

Building my app on Linux works fine. I just started preparing for an iOS release, so I setup node, ionic, and cordova on my Mac, and running npm install works fine, all packages install with no conflicts or unmet dependencies. Here’s the relevant parts of my package.json:

  "dependencies": {
        "@angular/common": "4.1.2",
        "@angular/compiler": "4.1.2",
        "@angular/compiler-cli": "4.1.2",
        "@angular/core": "4.1.2",
        "@angular/forms": "4.1.2",
        "@angular/http": "4.1.2",
        "@angular/platform-browser": "4.1.2",
        "@angular/platform-browser-dynamic": "4.1.2",
        "@ionic-native/app-version": "^4.1.0",
        "@ionic-native/core": "^4.1.0",
        "@ionic-native/firebase": "^4.1.0",
        "@ionic-native/in-app-browser": "^4.1.0",
        "@ionic-native/splash-screen": "^4.1.0",
        "@ionic-native/status-bar": "^4.1.0",
        "@ionic/cloud": "^0.16.0",
        "@ionic/cloud-angular": "^0.12.0",
        "@ionic/storage": "^2.0.1",
        "cordova-android": "^6.2.3",
        "cordova-ios": "^4.4.0",
        "cordova-plugin-app-version": "^0.1.9",
        "cordova-plugin-console": "^1.0.5",
        "cordova-plugin-device": "^1.1.4",
        "cordova-plugin-firebase": "^0.1.23",
        "cordova-plugin-inappbrowser": "^1.7.1",
        "cordova-plugin-splashscreen": "^4.0.3",
        "cordova-plugin-statusbar": "^2.2.1",
        "cordova-plugin-whitelist": "^1.3.1",
        "crypto-js": "^3.1.9-1",
        "fast-xml-parser": "^2.4.1",
        "ionic-angular": "3.3.0",
        "ionic-plugin-deploy": "^0.6.7",
        "ionic-plugin-keyboard": "^2.2.1",
        "ionicons": "3.0.0",
        "rxjs": "5.1.1",
        "sw-toolbox": "3.6.0",
        "zone.js": "^0.8.10"
    },
    "devDependencies": {
        "@ionic/app-scripts": "1.3.7",
        "@types/crypto-js": "^3.1.33",
        "ionic": "3.9.0",
        "typescript": "2.3.3"
    },
    "cordovaPlugins": [
        "cordova-plugin-whitelist",
        "cordova-plugin-statusbar",
        "cordova-plugin-console",
        "cordova-plugin-device",
        "cordova-plugin-splashscreen",
        "ionic-plugin-keyboard",
        "ionic-plugin-deploy",
        "cordova-plugin-app-version"
    ],
    "cordovaPlatforms": [
        {
            "platform": "android",
            "version": "6.2.1",
            "locator": "android"
        },
        {
            "platform": "browser",
            "version": "",
            "locator": "browser"
        }
    ],
    "description": "MCI: An Ionic project",
    "config": {
        "ionic_webpack": "./webpack.config.js"
    },
    "plugins": {
            "cordova-plugin-console": {},
            "cordova-plugin-device": {},
            "cordova-plugin-inappbrowser": {},
            "cordova-plugin-splashscreen": {},
            "cordova-plugin-statusbar": {},
            "cordova-plugin-whitelist": {},
            "ionic-plugin-deploy": {},
            "ionic-plugin-keyboard": {},
            "cordova-plugin-firebase": {},
            "cordova-plugin-app-version": {}
        }

Running ionic build on Linux works fine. running it on OS X errors wit:

Error: ./~/@ionic/cloud/dist/esm/auth.js
Module not found: Error: Can't resolve 'ionic-native' in '/Users/nmartin/Projects/mci-mobile-app/node_modules/@ionic/cloud/dist/esm'
resolve 'ionic-native' in '/Users/nmartin/Projects/mci-mobile-app/node_modules/@ionic/cloud/dist/esm'
  Parsed request is a module
  using description file: /Users/nmartin/Projects/mci-mobile-app/node_modules/@ionic/cloud/package.json (relative path: ./dist/esm)
    Field 'browser' doesn't contain a valid alias configuration
  after using description file: /Users/nmartin/Projects/mci-mobile-app/node_modules/@ionic/cloud/package.json (relative path: ./dist/esm)
    resolve as module

Looking at Error: ./~/@ionic/cloud/dist/esm/auth.js

It’s including ‘ionic-native’ which is now ‘@ionic-native/core’.

Why does this work on on Linux and not OS X, and how do I fix this?