javascript - Webpack3: require inside exported module not working -


when trying access module created util.js inside of file use module.exports in webpack, results in empty object @ build time. in image below, const utils = require(...) returns empty object.

enter image description here

however, when inspect const utils = require(...) inside of main script background-script.js , doesn't use module.exports, it's defined.

enter image description here

problem webpack doesn't seem resolving require's inside modules i'm using i'm exporting.

project file structure

  app   ├──plugins   │   ├── index.js (exports plugins)   |   ├──plugin1   |   │   ├── index.js (simply exports object)   |   |   |   |──plugin2   |       ├── index.js (simply exports object)   |   |--utils.js   |--background-script.js 

app/background-script.js

  const utils = require('../../util.js'); 

app/utils.js

  const utils ={....};   utils.plugins = require('./plugins/index.js');   module.exports = utils; 

plugins/index.js

  //require `index.js` file each plugin directory; works great.   const context = require.context('.', true, /index\.js/);   const requireallplugins = function(ctx) {     const keys = ctx.keys();     const values = keys.map(ctx);     return values;   }   const allplugins = requireallplugins(context);   module.exports = [...allplugins];  

plugin1/index.js

  //utils empty object   const utils = require('../../util.js');   module.exports = {action: utils.renderbookmark} 

answering own question

turns out reason why const utils = require('../../utils.js') inside app/plugins/plugin1/index.js returning empty object because had circular/cyclic dependency defined. basically, creating infinite loop way requiring modules. nodejs handles in specific way; returns empty object. see stackoverflow answer here

  //app/background-script.js    const utils = require('../../util.js');     |     |     ↓   //app/utils.js   const utils = {...}   utils.plugins = require('./plugins/index.js');     |     |     ↓     //app/plugins/index.js     const context = require.context('.', true, /index\.js/);     const requireallplugins = function(ctx) {       const keys = ctx.keys();       const values = keys.map(ctx);       return values;     }     const allplugins = requireallplugins(context);     module.exports = [...allplugins];     |     |     ↓     //plugins/plugin1/index.js     const utils = require('../../util.js');      |    module.exports = {action: utils.renderbookmark}     |     ↓   // app/utils.js   const utils = {...}       utils.plugins = require('./plugins/index.js'); //restarts calls above again.     |     |     ↓ node detected circular dependency, instead of repeating these calls again, forever, return `{}` instead. `{}` become     value of `utils` inside `plugins/plugin1/index.js` 

circular dependencies result of bad code organization. solve issue, removed

`require('./plugins/index.js');` utils 

this npm module webpack-cyclic-dependency-checker helped me find cyclic dependency after started sensing had cyclic dependency somewhere in codebase.


Comments

Popular posts from this blog

javascript - Create a stacked percentage column -

Optimising Firebase database by automatically overwriting data -

javascript - Angular UI-Grid customTemplate directive causing rows to load slowly/? -