prettier-java icon indicating copy to clipboard operation
prettier-java copied to clipboard

strict mode: Uncaught ReferenceError: process is not defined

Open lisonge opened this issue 2 years ago • 4 comments

https://github.com/jhipster/prettier-java/blob/main/packages/java-parser/src/utils.js

"use strict";

function getSkipValidations() {
  return (
    (process && // (not every runtime has a global `process` object
      process.env &&
      process.env["prettier-java-development-mode"] === "enabled") === false
  );
}

module.exports = {
  getSkipValidations
};

in browser env and strict mode, will throw error

image

you can fix it by globalThis.process = globalThis.process

"use strict";
globalThis.process = globalThis.process;
function getSkipValidations() {
  return (
    (process && // (not every runtime has a global `process` object
      process.env &&
      process.env["prettier-java-development-mode"] === "enabled") === false
  );
}

module.exports = {
  getSkipValidations
};

lisonge avatar Aug 23 '22 03:08 lisonge

prettier-plugin-java/v1.6.2.umd.js com form https://github.com/lisonge/pkg-cdn.git

lisonge avatar Aug 23 '22 03:08 lisonge

fix by custom rollup plugin

      {
        name: 'fix_process',
        transform(code, id) {
          if (
            id.endsWith('/node_modules/java-parser/src/utils.js') &&
            code.includes('process')
          ) {
            return {
              code: [code, ';globalThis.process = globalThis.process;'].join(
                '\n'
              ),
              map: null,
            };
          }
          return;
        },
      }

lisonge avatar Aug 23 '22 03:08 lisonge

@lisonge globalThis.process = globalThis.process 可以修复的原理是?

mazhe-nerd avatar Sep 20 '22 09:09 mazhe-nerd

@lisonge globalThis.process = globalThis.process 可以修复的原理是?

浏览器环境没有 process 全局变量/属性,严格模式 下使用未声明的变量/属性会报未定义错误

https://github.com/jhipster/prettier-java/blob/d7b64304a951320139d13ab856963a28b96c4aac/packages/java-parser/src/utils.js#L13-L15

globalThis.process = globalThis.process 的意思是声明 process 为全局变量/属性,让 process 变成已定义,此时再在函数内使用 process 则不会报未定义错误

lisonge avatar Sep 20 '22 09:09 lisonge

Having the same issue here

NilsBaumgartner1994 avatar Mar 25 '23 01:03 NilsBaumgartner1994