先明确一下,node 和 浏览器 无非就是两个 js运行时,只要是 js 文件都能在这两个环境上运行这里你用一个相同的 js 文件到两个环境上运行,差异在于:先说共同点,这两个环境对于 ES标准部分 的 js 逻辑的 解释执行都是没问题的区别在于,两个环境分别提供了一些不同的 上层api,比如 node 中的几大核心模块,fs,http,path 等;浏览器中的 window对象,web storage 等。如果你的 js 中使用了和 运行时环境 相关的 api,那么这个 js 就和环境绑定了,只能在对应的环境上运行。所以结论如下:要识别某个 js 是否只能在 某个运行时 上运行,通过 js 逻辑中的 api 来判断是很容易的如果没有用到 与某个运行时相关 的api,那么这个 js 就是通用的,任何 js运行时 都能跑,但需要注意对应 环境版本 对 ES标准 的支持程度。比如 环境只支持到 ES6,但你的 js 中用了 ES6 之后的新特性,那么需要用 babel 编译做语法降级,或者引入对应的 polyfill最后补充一点,不要轻易用 模块标准 去区分,不论是用 esm 还是 commonjs,还是其他 模块化标准,在 babel 或 其他编译工具 的加持下,都是能在任何 js运行时 上跑的
先明确一下,node 和 浏览器 无非就是两个
js运行时
,只要是 js 文件都能在这两个环境上运行这里你用一个相同的 js 文件到两个环境上运行,差异在于:
ES标准部分
的 js 逻辑的 解释执行都是没问题的上层api
,比如 node 中的几大核心模块,fs,http,path 等;浏览器中的 window对象,web storage 等。如果你的 js 中使用了和运行时环境
相关的 api,那么这个 js 就和环境绑定了,只能在对应的环境上运行。所以结论如下:
如果没有用到
与某个运行时相关
的api,那么这个 js 就是通用的,任何 js运行时 都能跑,但需要注意对应环境版本
对ES标准
的支持程度。babel
编译做语法降级,或者引入对应的polyfill
最后补充一点,不要轻易用
模块标准
去区分,不论是用esm
还是commonjs
,还是其他 模块化标准,在babel 或 其他编译工具
的加持下,都是能在任何 js运行时 上跑的