Search code examples
reactjsbabeljstranspilerparceljs

Parcel + Babel not transpiling ES6 from node_modules?


I can't seem to get Babel to work with Parcel, although the presets are being installed automatically. It works locally and in Chrome, but it's not transpiling node_modules es6 files, so the output still has const/let/... and it cannot run in Safari.

.babelrc

{
  "presets": ["@babel/preset-env","@babel/preset-react"]
}

(I've also tried the env and react ones).

package.json scripts

"scripts": {
    "start": "parcel index.html",
    "build": "parcel build index.html",

Why would this be?

Full package.json (note this is after messing around in order to try to get it working)

{
  "name": "my-react-app",
  "version": "1.0.0",
  "description": "",
  "main": "src/index.js",
  "scripts": {
    "start": "parcel index.html",
    "build": "parcel build index.html"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@babel/core": "^7.1.5",
    "@babel/preset-env": "^7.1.5",
    "@babel/preset-react": "^7.0.0",
    "axios": "^0.18.0",
    "babel-polyfill": "^6.26.0",
    "browserslist": "^4.3.4",
    "lodash": "^4.17.11",
    "node-sass": "^4.10.0",
    "pinyin": "^2.8.3",
    "prop-types": "^15.6.2",
    "react": "^16.6.1",
    "react-dom": "^16.6.1",
    "react-notifications": "^1.4.3",
    "react-router-dom": "^4.3.1"
  },
  "devDependencies": {
    "cssnano": "^4.1.7",
    "sass": "^1.14.3"
  }
}

Still getting .js files with const, let. Any ideas what I am missing?


Solution

  • I've found a solution to it from https://github.com/parcel-bundler/parcel/issues/1655#issuecomment-425593377

    // .browserslistrc.packages
    node 10.11
    
    // package.json
    {
      "scripts": {
        "postinstall": "npm-run-all -p \"postinstall:*\"",
        "postinstall:p-retry": "cpy --rename=.browserslistrc .browserslistrc.packages node_modules/p-retry",
        "postinstall:query-string": "cpy --rename=.browserslistrc .browserslistrc.packages node_modules/query-string"
      }
    }
    

    Add a postinstall:package-name for every npm package that you need to add transpilation (in my case, pinyin) and run npm run postinstall after every npm install. Babel should now also transpile that npm package!