Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"Critical dependency: the request of a dependency is an expression" in iconv-loader.js #3078

Closed
dandv opened this issue Sep 29, 2016 · 10 comments
Labels

Comments

@dandv
Copy link

dandv commented Sep 29, 2016

I'm submitting a bug report

Webpack version:
2.1.0-beta.25

Please tell us about your environment:
Linux

Current behavior:

$ node_modules/.bin/webpack index.js bundle.js
Hash: d8a619eb613c35b46760
Version: webpack 2.1.0-beta.25
Time: 868ms
    Asset    Size  Chunks             Chunk Names
bundle.js  656 kB       0  [emitted]  main
  [87] ./index.js 35 bytes {0} [built]
    + 87 hidden modules

WARNING in ./~/encoding/lib/iconv-loader.js
9:12 Critical dependency: the request of a dependency is an expression

ERROR in ./~/iconv-lite/encodings/tables/gb18030-ranges.json
Module parse failed: ./node_modules/iconv-lite/encodings/tables/gb18030-ranges.json Unexpected token (1:9)
You may need an appropriate loader to handle this file type.
| {"uChars":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],"gbChars":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]}
 @ ./~/iconv-lite/encodings/dbcs-data.js 99:37-76
 @ ./~/iconv-lite/encodings/index.js
 @ ./~/iconv-lite/lib/index.js
 @ ./~/encoding/lib/encoding.js
 @ ./~/node-fetch/lib/body.js
 @ ./~/node-fetch/index.js
 @ ./index.js
  • If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem along with a gist/jsbin of your webpack configuration.
npm init
npm install --save node-fetch
npm install --save-dev webpack@2.1.0-beta.25
echo "let fetch = require('node-fetch');" > index.js
node_modules/.bin/webpack index.js bundle.js
  • Language: ES6
@Jessidhia
Copy link
Member

You seem to be missing { test: /\.json($|\?)/, use: 'json-loader' }. Webpack is failing to parse the .json file because, if interpreted as javascript, it looks like a block (think of there being an if (true) in front of the {); even if it worked, it would export nothing.

@bebraw
Copy link
Contributor

bebraw commented Sep 29, 2016

Yeah, there's not much we can do about it in the core. You'll have to set up a loader.

@bebraw bebraw closed this as completed Sep 29, 2016
@dandv
Copy link
Author

dandv commented Sep 30, 2016

Adding

loaders: [
  {test: /\.json$/, loader: 'json-loader'}
]

solved the problem. Thanks.

@MehdiITService
Copy link

where i have to add this ?
loaders: [
{test: /.json$/, loader: 'json-loader'}
]

@LukasBombach
Copy link

This is still a thing and adding the json-loader will not work because other dependencies will fail when I do this. What does work though is ignoring iconv:

plugins[
  new webpack.IgnorePlugin(/\/iconv-loader$/)
]

I wonder if this is a bug in webpack or in iconv because if it's iconv I will file an issue there. Can someone clarify this?

@fniewijk
Copy link

fniewijk commented Nov 26, 2018

@LukasBombach Reading this issue, it seems that it is intentional by as mentioned by the maintainer of the iconv package in order to provide a fallback for Browserify users. This issue also notes that your solution is the right one to deal with this problem.

@lid3rs
Copy link

lid3rs commented Mar 11, 2019

plugins[
  new webpack.IgnorePlugin(/\/iconv-loader$/)
]

Could you clarify, where this should be written?

@LukasBombach
Copy link

@lid3rs in your Webpack config: https://webpack.js.org/configuration/plugins/

@garyo
Copy link

garyo commented May 8, 2019

I may be misunderstanding this issue or the solution shown above, but I got here because I see the same error in my Vue project: Warning in ./node_modules/encoding/lib/iconv-loader.js; Critical dependency: the request of a dependency is an expression.

I added to my vue.config.js:

const webpack = require('webpack')
module.exports = {
  configureWebpack: {
    plugins: [
      new webpack.IgnorePlugin(/\/iconv-loader$/),
    ],
   ...
}

but now I get a fatal error instead of just a warning message: Error: cannot find module ./iconv-loader, which makes sense since webpack is now ignoring it.

@Gothmagog
Copy link

I was able to ignore it by adding:

module: { noParse: /iconv-loader\.js/, ...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

9 participants