developit / preact-redux

:loop: Preact integration for Redux (no shim needed!)
https://npm.im/preact-redux
MIT License
288 stars 27 forks source link

'Provider' is not exported #14

Closed sydev closed 7 years ago

sydev commented 7 years ago

I ran in an issue where following error is thrown:

Error: 'Provider' is not exported by node_modules/preact-redux/dist/preact-redux.js
    at error (/Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:170:12)
    at Module.error$1 [as error] (/Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:8007:2)
    at Module.trace (/Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:8106:9)
    at ModuleScope.findDeclaration (/Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:7691:22)
    at Node.bind (/Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:6743:29)
    at /Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:5291:50
    at Node.eachChild (/Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:5305:19)
    at Node.bind (/Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:5291:7)
    at Node.bind (/Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:6040:23)
    at /Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:5291:50

My implementation:

import preact from 'preact';
import {Provider} from 'preact-redux';
import {createStore} from 'redux';

// Components
import App from './components/app.jsx';

const store = createStore();

preact.render(
  <Provider store={store}>
    <App />
  </Provider>, 
  document.getElementById('app'));

Can someone confirm this error?

ezekielchentnik commented 7 years ago

@sydev what bundler are you using?

sydev commented 7 years ago

I use rollup with gulp. Here my config:

// Build JS
  gulp.task('build-js', () => {
    let env = process.env.NODE_ENV;

    return rollup({
      entry: './src/js/main.jsx',
      plugins: [
        resolve(), 
        replace({'process.env.NODE_ENV': JSON.stringify(env)}),
        common(),
        babel({exclude: 'node_modules/**'}),
        env === 'productions' && uglify()
      ],
      format: 'iife'
    }).pipe(source('main.jsx', './src/js/'))
      .pipe(buffer())
      .pipe(rename({extname: '.js'}))
      .pipe(gulp.dest('./client/assets/js'));
  });
developit commented 7 years ago

@sydev I think you need to do resolve({ jsnext: true }) (I'm assuming resolve is rollup-plugin-node-resolve)

sydev commented 7 years ago

@developit Yeah, resolve is rollup-plugin-node-resolve. But adding {jsnext: true} does not change anything but the referenced file in thrown error:

Error: 'Provider' is not exported by node_modules/preact-redux/dist/preact-redux.esm.js
    at error (/Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:170:12)
    at Module.error$1 [as error] (/Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:8007:2)
    at Module.trace (/Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:8106:9)
    at ModuleScope.findDeclaration (/Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:7691:22)
    at Node.bind (/Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:6743:29)
    at /Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:5291:50
    at Node.eachChild (/Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:5305:19)
    at Node.bind (/Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:5291:7)
    at Node.bind (/Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:6040:23)
    at /Users/dominik/code/material-explorer/node_modules/rollup/dist/rollup.js:5291:50

I also tried {jsnext: true, module: true}, {jsnext: true, main: true} and {jsnext: true, main: true, module: true}.

Now it´s preact-redux.esm.js, not preact-redux.js, which seems right to me, because preact-redux.esm.js IS exporting Provider:

source

Strange error :(

developit commented 7 years ago

Ah - it's the same thing I fixed last week in preact-compat: https://github.com/developit/preact-compat/commit/a4624cdef9af217c146f28ce5ce6fe084abed775

lohfu commented 7 years ago

Is this being fixed? Looking through the package.json i see jsnext:main points at dist/preact-redux.esm.js... which does not export any named exports at all, only a default export

lohfu commented 7 years ago

@developit are there any plans on exporting named exports from dist/preact-redux.esm.js?

developit commented 7 years ago

Yes - I need to merge Ezekiel's PR.

developit commented 7 years ago

Fixed in 2.0.2