minify icon indicating copy to clipboard operation
minify copied to clipboard

TypeError: Cannot read property 'isPure' of null

Open jy95 opened this issue 7 years ago • 8 comments

Input Code

Repo : https://github.com/jy95/torrent-files-library/tree/5b771ae69dd9b796b30a1147bedc25cd085af09d Changes not commited : Just added "babel-preset-minify": "^0.3.0" in my package.json and updated my .babelrc.js like this

let env = process.env.BABEL_ENV || process.env.NODE_ENV;
let presets = [];
let plugins = ["@babel/plugin-proposal-object-rest-spread"];
let ignore = ["src/docs/**/*.js"];
let comments = false;

// custom settings for prod/test ; for example babel-istanbul-plugin , etc.
switch (env){
  case 'test':
    // ./fix-coverage/arrow-function-coverage-fix.js : Because some odd issue for istanbul/nyc
    plugins.push.apply(plugins, ["./fix-coverage/arrow-function-coverage-fix.js", "babel-plugin-istanbul"]);
    break;

  case 'production':
    presets.push.apply(presets, ['minify']);
    break;
}

// default preset
presets.push.apply(presets, ["@babel/preset-env"]);

module.exports = {
  presets: presets,
  plugins: plugins,
  ignore: ignore,
  comments: comments,
};

Command to run production build

npm run prepare

Actual Output

TypeError: Cannot read property 'isPure' of null
    at Object.checkPath (D:\workspaceNodeJs\torrent-files-library\node_modules\@babel\traverse\lib\path\lib\virtual-types.js:120:23)
    at NodePath.(anonymous function) [as isPure] (D:\workspaceNodeJs\torrent-files-library\node_modules\@babel\traverse\lib\path\index.js:226:24)
    at isPureAndUndefined (D:\workspaceNodeJs\torrent-files-library\node_modules\babel-plugin-transform-remove-undefined\lib\index.js:21:13)
    at PluginPass.VariableDeclaration (D:\workspaceNodeJs\torrent-files-library\node_modules\babel-plugin-transform-remove-undefined\lib\index.js:216:21)
    at newFn (D:\workspaceNodeJs\torrent-files-library\node_modules\@babel\traverse\lib\visitors.js:223:21)
    at NodePath._call (D:\workspaceNodeJs\torrent-files-library\node_modules\@babel\traverse\lib\path\context.js:64:19)
    at NodePath.call (D:\workspaceNodeJs\torrent-files-library\node_modules\@babel\traverse\lib\path\context.js:38:17)
    at NodePath.visit (D:\workspaceNodeJs\torrent-files-library\node_modules\@babel\traverse\lib\path\context.js:99:12)
    at TraversalContext.visitQueue (D:\workspaceNodeJs\torrent-files-library\node_modules\@babel\traverse\lib\context.js:139:18)
    at TraversalContext.visitMultiple (D:\workspaceNodeJs\torrent-files-library\node_modules\@babel\traverse\lib\context.js:93:17)

Thanks for your help.

jy95 avatar Feb 02 '18 23:02 jy95

@jy95 Thanks for opening the issue. I am also facing the problem

nurrony avatar Feb 14 '18 13:02 nurrony

Here's a workaround, disable removeUndefined:

['minify', { removeUndefined: false }]

garymathews avatar Feb 14 '18 21:02 garymathews

thanks, seems to work like this :

presets.push.apply(presets, [['minify', { removeUndefined: false }]] );

Just wonder why this thing is set by default to true if it causes problems in ES modules ..

jy95 avatar Feb 14 '18 23:02 jy95

in my case

['minify', { removeUndefined: false, simplify: false }]

ghost avatar Feb 23 '18 08:02 ghost

I've been able to narrow down to the line of code that causes the error message, an arrow function returning false seems to be the culprit. Made some other tests

const foo = () => false; // TypeError: Cannot read property 'isPure' of null
const bar = () => null; // TypeError: Cannot read property 'isPure' of null
const baz = () => undefined; // okay!

infctr avatar Apr 01 '18 12:04 infctr

I'm not able to reproduce this.

const foo = () => false;
const bar = () => null;
const baz = () => undefined;

works as intended. Can someone here provide code that reproduces this error?

boopathi avatar Apr 08 '18 08:04 boopathi

Try this one:

const someFunc = () => {
	let someVar; // <- this triggers it
}

Unrelated, but a nice discovery, also with minify:

let someVar; // "traverse.clearCache is not a function"

Both happen on https://babeljs.io/repl using its minify option checkbox.

sybrew avatar Mar 30 '19 13:03 sybrew

I'm not able to reproduce this.

const foo = () => false;
const bar = () => null;
const baz = () => undefined;

works as intended. Can someone here provide code that reproduces this error?

https://babeljs.io/repl#?babili=true&browsers=&build=&builtIns=false&spec=false&loose=false&code_lz=BQMwrgdgxgLglgewsAlAAgN4Cg27QNwEMAnNGBMKACwGUYSYAJQiAEwBsBTYgGhzwHlKVALIJ8nZmy69-A3EOoAFBHAgwA3FjloA9LrQB5COwCeaCJ06traEAlKKqaThPUBnNEjTViCALacAHQ6cCBowMAA7mqsCFFBvgGcaAA-qRaE-HAA5oTkxEFg7twAgjmc6kH--dTAAEQAwsRwhjT1KCg6AgBkPWj1SE7u9MQw9WhqaHFQYIFVM3OVMACiXPMw6NjdeE50DFIc3GgAvHaQsIjIWzvyegbGZhZWrGQIaFQsR2juajlcAFonD5CCV3Ld5E4VGoYKcXG4YEEnJx3EEuBAcjBnCccWgAIxoAD88OWSIo1BRAG0AAwAXUS7DgywAmmgAFwWMDsdhaO64AC-WghTjEEkOMjh4Gg8CQwFcyxufPkRFIliiABVyVRoeohUqBPojCZzJZbOQPl8uD8_oDgVBQSiIQIwhF5VVkaj0ZjnABCXF4xX6u5Q1TqOEQLk87RBu7ETgwMDECC8mP86Mxw0AdRSSCepte5psIEIXJgSjjCLQUSolR-UD83L-aDAAAcnXg1ZrhDrYWc3YiPTT6VBGSyU0GXcBO1qe2gAHxvbuhzaYdt3ftBFsV5YAEU4xdLqHH-rTMcXymX4c4Gpny-PAkF6buiw2QUIrFYKwRABk4CNKtwDTDKM4w8OetAgeK3BgdgZ4tqCvwSByxbsCUEL8igep8i-pLvp-P5_jAAHEEBWr-OInD1GBIoUVBvCrnBCFwEhdiEKhnDoZhT5oGmGFHkAA&debug=false&forceAllTransforms=false&shippedProposals=false&circleciRepo=&evaluate=false&fileSize=false&timeTravel=false&sourceType=module&lineWrap=false&presets=es2017%2Cbabili&prettier=false&targets=&version=7.5.5&externalPlugins=

Zireael avatar Aug 10 '19 12:08 Zireael