I’m building a Forge application uploading files to remote server with formdata-node
, and I get below error while bundling. Anyone ever seen this? Or is there any limits with Forge bundling?
Reloading code…
=== Running forge lint…
No issues found.=== Bundling code…
Error: Bundling failed: Module not found: Error: Can’t resolve ‘formdata-node/file-from-path’ in ‘/app/src/testrail’
Here is my package.json
{
"name": "jira-test-plugin",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"private": true,
"scripts": {
"lint": "./node_modules/.bin/eslint src/**/* || npm run --silent hook-errors",
"clean": "rm -fr node_modules",
"hook-errors": "echo '\\x1b[31mThe build failed because a Forge UI hook is being used incorrectly. Forge UI hooks follow the same rules as React Hooks but have their own API definitions. See the Forge documentation for details on how to use Forge UI hooks.\n' && exit 1"
},
"devDependencies": {
"eslint": "^8.25.0",
"eslint-plugin-react-hooks": "^4.6.0",
"@types/jest": "26.0.14",
"@types/node": "14.17.0",
"@typescript-eslint/eslint-plugin": "5.37.0",
"@typescript-eslint/parser": "5.37.0",
"eslint-plugin-jsdoc": "39.3.6",
"eslint-plugin-prefer-arrow": "1.2.3",
"jest": "28.1.3",
"jest-junit": "12.2.0",
"ts-jest": "28.0.8",
"ts-loader": "9.3.1",
"ts-node": "10.9.1",
"typescript": "4.7.4"
},
"dependencies": {
"@forge/api": "^2.6.0",
"@forge/resolver": "^1.4.2",
"@forge/ui": "1.4.0",
"agentkeepalive": "4.2.0",
"axios": "0.21.1",
"axios-retry": "3.2.4",
"form-data-encoder": "1.7.2",
"formdata-node": "^5.0.0",
"https-proxy-agent": "5.0.0",
"log4js": "6.4.0",
"socks-proxy-agent": "5.0.0"
}
}
and the typescript file importing 'formdata-node",
import { Logger } from "../util/Logger";
import { FormDataEncoder } from "form-data-encoder";
import { FormData } from "formdata-node";
import { fileFromPathSync } from "formdata-node/file-from-path";
export class TestRailClient {
public uploadAttachment(url: string, name: string, filepath: string): void {
const form = new FormData();
try {
form.set("attachment", fileFromPathSync(filepath), name);
const encoder = new FormDataEncoder(form);
// return this.handleResponse(this.axiosInstance.post(url, Readable.from(encoder), {headers: encoder.headers})) as Promise<AttachmentUploadResult>;
} catch (error) {
Logger.error(error);
throw error;
}
}
}