npm 错误:UncaughtException:未定义原基

wa7juj8i  于 2023-06-23  发布在  其他
关注(0)|答案(4)|浏览(98)

我安装aws-s3-zipper使用npm,之后,我得到这个错误。
这是我的代码:

AWS = require("aws-sdk");
var S3Zipper = require("aws-s3-zipper");

function zipFolderOnS3() {

    var zipper = new S3Zipper(config);

    return new Promise((resolve, reject) => {
        var config = {
            accessKeyId: process.env.ACCESS_KEY_ID,
            secretAccessKey: process.env.SECRET_ACCESS_KEY,
            region: process.env.REGION,
            bucket: process.env.BUCKET_NAME
        };
        var zipper = new S3Zipper(config);
        try {
            zipper.zipToS3FileFragments({
                s3FolderName: "Documents"
                , MaxFileCount: 50
                //, startKey: ‘keyOfLastFileIZipped' // optional
                , S3ZipFileName: "Documents.zip",
                recursive: true
            }, function (err, result) {
                if (err) {
                    console.error(err);
                }
                else {
                    console.error("File uploaded on s3");
                }
            });
        } catch (e) {
            console.log(e)
        }
    });
}

module.exports = {
    zipFolderOnS3
};
gj3fmq9x

gj3fmq9x1#

aws-s3-zipper依赖于s3node-s3-clientgraceful-fs依赖于graceful-fs,该graceful-fs(s3@4.4.0当前包含的版本)与节点v12及以上版本存在问题/不兼容性。
根据this graceful-fs v4.2.2已知可与节点12…
真正需要发生的是,node-s3-client需要更新它们对graceful-fs的依赖。已经有一个open github issue,其中有人建议使用@auth0/s3。
所以,你可以尝试让aws-s3-zipper切换到使用它,直到官方软件包更新。或者... aws-s3-zipper只是一个单独的文件,所以你也可以把它复制到你的项目中。
以下是我能够得到的工作:
1.首先更新你的部门

npm uninstall aws-s3-zipper
npm install @auth0/s3 archiver

1.将index.js source code从aws-s3-zipper复制到项目中的一个新文件中,比如./aws-s3-zipper.js
1.更新文件中的require语句:

// you can remove the AWS require as it's not actually used at all here
// AWS = require("aws-sdk");

// make this a relative path instead of including the package
var S3Zipper = require("./aws-s3-zipper");

1.最后,修复你复制下来的./aws-s3-zipper.js中的依赖问题:

var assert = require('assert');
var archiver = require('archiver');
var async = require('async');
var AWS = require('aws-sdk');
var fs = require('fs');
// change `s3` to `@auth0/s3`
var s3 = require('@auth0/s3');

// ... the rest of the package

我在aws-s3-zipper仓库中评论了this GitHub issue,认为他们可能有同样的问题,看看他们是否可能暂时切换到@auth0/s3

guicsvcw

guicsvcw2#

将s3中的依赖项从graceful-fs": "~3.0.5",更新为"graceful-fs": "^4.2.6",
我决定了

l0oc07j2

l0oc07j23#

此分类上一篇:https://github.com/andrewrk/node-s3-client/issues/236
将以下内容添加到package.json文件中,这样s3就可以使用node > 12了。

"resolutions": {
    "graceful-fs": "4.x.x"
  },
k5ifujac

k5ifujac4#

正如其他人提到的,你必须升级graceful-fs,但我不得不手动修改我的包锁,然后运行npm install

"node_modules/s3/node_modules/graceful-fs": {
      "version": "4.2.11",
      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
    },

相关问题