我正在使用Vite和vanilla-ts创建一个项目,有一次我不得不使用fs-extra
包中的readdir
方法,但它创建了一个错误process is not defined
,有人建议我将此代码放在我的vite-config.ts
文件中:
import { defineConfig } from 'vite'
export default defineConfig({
define: {
'process.env': {}
}
})
这修复了初始错误,但创建了一个读取global is not defined
的新错误,进一步研究并在define
对象上添加'global': {}
,与之前修复的错误一样,但创建了另一个读取Cannot read properties of undefined (reading 'substr')
的错误
所用代码:
import { readdirSync } from 'fs-extra';
const folders = readdirSync('./', { withFileTypes: true })
.filter(dir => dir.isDirectory);
Vite版本:第二年九月五日
FS-额外版本:九月十三日
4条答案
按热度按时间laawzig21#
更温和的解决方案:
tzdcorbm2#
问题是vite没有像webpack那样在
window
中定义一个global
字段,而且一些库依赖于它,因为webpack比vite老得多。只需在任何库导入之前的最开始插入:
在导入之前有上述代码的一个好方法是写入新文件,我们称之为
init.js
,并作为第一个文件导入。e4eetjau3#
Omg谢谢你Patrick Hübl-Neschkudla!
对我有效的是定义全球:'窗口',这样,库依赖于global.something工作(例如lodash使用global.isFinite()这是抛出错误)-帕特里克Hübl-Neschkudla九月13,2022在8:27
我在这个问题上挣扎了2个小时,终于从你那里找到了解决办法。
对我来说,问题是,AWS认证器需要使用需要在vite config上定义“global”的缓冲包,而我也有在其主phase.js代码中声明global.somethingsomething的Phaser包。
使用vite config中定义的“global”,在编译phaser时运行“npm run build”失败,表示在其声明“global”的部分存在意外标记:等等。
当我没有在vite config中定义'global'时,那么'npm run build'不会失败,但是AWS验证器将无法工作并抛出控制台。错误,说'global'没有在缓冲区中定义。
设置
在vite.config中解决了这个问题。
eni9jsuy4#
您很可能将Vite用于前端项目。fs-extra(文件访问)/global(nodejs global)并不存在于浏览器(前端)中。
修复
使用一个后端项目并导出一个API,然后可以从Vite/frontend使用该API在服务器上进行文件系统更改。