J'ai trouvé un avertissement étrange dans webpack. Lors de l'analyse de process.env
à l'aide de babel-loader
. Un avertissement (TypeError: result.setExpression is not a function
) s'est produit danswebpack/lib/Parser.js
. Je suis sur un gros projet et je veux que mon noyau soit super solide. Donc, est-il prudent d'ignorer cet avertissement, car Webpack le détecte explicitement et commente 'Ignorer l'erreur'?
L'avertissement (TypeError: result.setExpression is not a function
) s'est produit ici (webpack/lib/Parser.js https://github.com/webpack/webpack/blob/2361995a429794d372d61e3fb628dea3929e0ca4/lib/Parser.js#L1987 )
evaluateExpression(expression) {
try {
const hook = this.hooks.evaluate.get(expression.type);
if (hook !== undefined) {
const result = hook.call(expression);
if (result !== undefined) {
if (result) {
result.setExpression(expression);
}
return result;
}
}
} catch (e) {
console.warn(e);
// ignore error
}
return new BasicEvaluatedExpression()
.setRange(expression.range)
.setExpression(expression);
}
J'ai imprimé cette result
et je l'ai trouvée
BasicEvaluatedExpression {
type: 0,
range: [ 945, 956 ],
falsy: false,
truthy: true,
bool: null,
number: null,
regExp: null,
string: null,
quasis: null,
array: null,
items: null,
options: null,
prefix: null,
postfix: null }
J'ai aussi imprimé la expression
{
type: 'MemberExpression',
start: 945,
end: 956,
loc:
SourceLocation {
start: Position { line: 16, column: 13 },
end: Position { line: 16, column: 24 } },
range: [ 945, 956 ],
object:
Node {
type: 'Identifier',
start: 945,
end: 952,
loc: SourceLocation { start: [Object], end: [Object] },
range: [ 945, 952 ],
name: 'process' },
property:
Node {
type: 'Identifier',
start: 953,
end: 956,
loc: SourceLocation { start: [Object], end: [Object] },
range: [ 953, 956 ],
name: 'env' },
computed: false }
Le process.env
vient de quelque chose comme
var isProd = process.env && process.env.NODE_ENV === 'production';
Contexte:
Le message d'avertissement complet:
TypeError: result.setExpression is not a function
at Parser.evaluateExpression (node_modules/webpack/lib/Parser.js:1991:14)
at hooks.evaluate.for.tap.expr (node_modules/webpack/lib/Parser.js:368:17)
at SyncBailHook.eval [as call] (eval at create (node_modules/tapable/lib/HookCodeFactory.js:19:10), <anonymous>:7:16)
at Parser.evaluateExpression (node_modules/webpack/lib/Parser.js:1984:25)
at parser.hooks.statementIf.tap.statement (node_modules/webpack/lib/ConstPlugin.js:122:28)
at SyncBailHook.eval [as call] (eval at create (node_modules/tapable/lib/HookCodeFactory.js:19:10), <anonymous>:7:16)
at Parser.walkIfStatement (node_modules/webpack/lib/Parser.js:1011:41)
at Parser.walkStatement (node_modules/webpack/lib/Parser.js:961:10)
at Parser.walkStatements (node_modules/webpack/lib/Parser.js:864:9)
at Parser.walkBlockStatement (node_modules/webpack/lib/Parser.js:996:8)
at Parser.walkStatement (node_modules/webpack/lib/Parser.js:931:10)
at inScope (node_modules/webpack/lib/Parser.js:1603:10)
at Parser.inScope (node_modules/webpack/lib/Parser.js:1910:3)
at Parser.walkFunctionExpression (node_modules/webpack/lib/Parser.js:1596:8)
at Parser.walkExpression (node_modules/webpack/lib/Parser.js:1509:10)
at Parser.walkAssignmentExpression (node_modules/webpack/lib/Parser.js:1694:8)
at Parser.walkExpression (node_modules/webpack/lib/Parser.js:1491:10)
at Parser.walkExpressionStatement (node_modules/webpack/lib/Parser.js:1000:8)
at Parser.walkStatement (node_modules/webpack/lib/Parser.js:946:10)
at Parser.walkStatements (node_modules/webpack/lib/Parser.js:864:9)
at Parser.walkBlockStatement (node_modules/webpack/lib/Parser.js:996:8)
at Parser.walkStatement (node_modules/webpack/lib/Parser.js:931:10)
at inScope (node_modules/webpack/lib/Parser.js:1792:10)
at Parser.inScope (node_modules/webpack/lib/Parser.js:1910:3)
at Parser._walkIIFE (node_modules/webpack/lib/Parser.js:1780:8)
at Parser.walkCallExpression (node_modules/webpack/lib/Parser.js:1817:9)
at Parser.walkExpression (node_modules/webpack/lib/Parser.js:1500:10)
at Parser.walkVariableDeclaration (node_modules/webpack/lib/Parser.js:1381:32)
at Parser.walkStatement (node_modules/webpack/lib/Parser.js:979:10)
at Parser.walkStatements (node_modules/webpack/lib/Parser.js:864:9)
at Parser.parse (node_modules/webpack/lib/Parser.js:2127:9)
at doBuild.err (node_modules/webpack/lib/NormalModule.js:446:32)
at runLoaders (node_modules/webpack/lib/NormalModule.js:327:12)
at node_modules/loader-runner/lib/LoaderRunner.js:370:3
at iterateNormalLoaders (node_modules/loader-runner/lib/LoaderRunner.js:211:10)
at iterateNormalLoaders (node_modules/loader-runner/lib/LoaderRunner.js:218:10)
Mes configurations de babel sont:
"webpack": "4.25.1",
"babel-core": "6.26.3",
"babel-eslint": "8.2.6",
"babel-loader": "7.1.5",
"babel-plugin-transform-class-properties": "6.24.1",
"babel-plugin-transform-object-rest-spread": "6.26.0",
"babel-plugin-transform-runtime": "6.23.0",
"babel-preset-env": "1.7.0",
"babel-preset-react": "6.24.1",
"babel-register": "6.26.0",
const babelCoreConfig = {
babelrc: false,
presets: [
'babel-preset-env',
'babel-preset-react'
],
plugins: [
'babel-plugin-transform-class-properties',
['babel-plugin-transform-runtime', {
helpers: true,
polyfill: false,
regenerator: false,
}],
'babel-plugin-transform-object-rest-spread'
]
};
J'ai fait face à ce même problème et ai lutté pendant environ une demi-journée pour le résoudre. Je recevais cet avertissement à l'expression module.hot
. J'utilisais react-hot-loader.
J'ai supprimé l'option --hot
dans webpack-dev-server --hot --config ./webpack.dev.config.js --mode development
et ajouté le webpackHotModuleReplacementPlugin
dans webpack config. Cela a résolu le problème.
Où ce process.env
est-il utilisé? Si cela se trouve dans la configuration Webpack et si votre configuration Webpack est une simple exportation d'objet JS, ce serait indéfini.
Si c'est dans un fichier, essayez de le consigner et vérifiez s'il est indéfini.