如何在使用ParcelJS构建的Cypress测试中使用绝对路径导入?

如何在使用ParcelJS构建的Cypress测试中使用绝对路径导入?,cypress,parceljs,Cypress,Parceljs,在我的地块项目中,我使用带有绝对路径的导入,但这些绝对路径并不是通过Cypress测试同等地解析的 模块分辨率差异 地块:从“/foo.js”导入{foo}:相对于项目根目录 Cypress:从'/foo.js'导入{foo}:绝对磁盘根目录 当地块的入口点位于src文件夹中时,导入/foo.js项目中的任何位置都会在路径/src/foo.js中查找文件。(文件:) 但Cypress没有任何入口点,如果它试图使用绝对路径导入文件,它会将/视为文件系统根。当导入的文件(foo.js)在内部导入另一

在我的地块项目中,我使用带有绝对路径的导入,但这些绝对路径并不是通过Cypress测试同等地解析的

模块分辨率差异 地块
从“/foo.js”导入{foo}
:相对于项目根目录

Cypress
从'/foo.js'导入{foo}
:绝对磁盘根目录

当地块的入口点位于
src
文件夹中时,导入
/foo.js
项目中的任何位置都会在路径
/src/foo.js
中查找文件。(文件:)

但Cypress没有任何入口点,如果它试图使用绝对路径导入文件,它会将
/
视为文件系统根。当导入的文件(foo.js)在内部导入另一个文件(bar.js)时,可能会发生这种情况

例子 cypress-test.js

foo.js


如何使Cypress像Parcel那样解析相对于某个入口点的绝对路径?

您可以自己编译规范文件,更改路径解析

为此,您可以使用Cypress官方软件,添加
路径
,还可以浏览插件,该插件将负责剥离路径中的前导
/
,以便路径解析正确工作

首先,通过以下方式安装软件包:

npm install -D @cypress/browserify-preprocessor pathmodify
然后在
cypress/plugins/index.js中:

const preprocessor=require(“@cypress/browserify preprocessor”);
const pathmodify=require('pathmodify');
const browserifyOptions=预处理器.defaultOptions.browserifyOptions;
// -----------------------------------------------------------------------------
//(1)解析相对于项目根的路径
// -----------------------------------------------------------------------------
browserifyOptions.path=[
//process.cwd()依赖于从中启动的cypress进程
//项目根目录。您也可以在此处使用绝对路径。
require('path').resolve(process.cwd())
];
// -----------------------------------------------------------------------------
//(2)将以“/”开头的路径视为项目相对路径
// -----------------------------------------------------------------------------
browserifyOptions.plugin=browserifyOptions.plugin | | |[];
browserifyOptions.plugin.unshift([
路径修改,{mods:[
//解析路径时带前导“/”
pathmodify.mod.re(/^\/,'')
]}
]);
// -----------------------------------------------------------------------------
//(3)运行时编译规范文件
// -----------------------------------------------------------------------------
const compileFile=预处理器(preprocessor.defaultOptions);
module.exports=(打开)=>{
on('file:preprocessor',file=>{
返回compileFile(文件);
});
}

了解更多信息,请访问

尽管@allide solution在解析Cypress文件时解决了此问题,但它会为Parcel创建相同的问题。对于地块,
/
表示项目根。如果我省略
/
则Parcel将解析相对于当前文件的文件路径。是,但您只编译cypress规范,不是吗?包裹是怎么装进去的?你应该继续用parcel编译你的应用程序,并使用你想要的任何路径,在cypress规范中,你不需要编写初始的
/
。否则,我不知道问题出在哪里。问题是当在Cypress test中导入的文件在内部导入另一个文件时(使用
/
)。对不起,我会在问题中说得更清楚。对,我没有想到:facepalm:。好的,让我想想
@cypress/browserify预处理器
插件中的第一个
/
。谢谢
import {bar} from '/bar.js' // Absolute path not found by Cypress
//...
npm install -D @cypress/browserify-preprocessor pathmodify