Single JavaScript file Actors are being deprecated
We will automatically convert single-file Actors to multi-file and keep them working. If you are using Apify API to update the code of your single-file actors or create new ones, then you will have to update your API integration following the instructions below.
We've decided to say goodbye to single-file JavaScript Actors, but don't worry, we will automatically convert them to multi-file.
TL;DR: We will automatically convert single-file Actors to multi-file and keep them working. If you are using the Apify API to update the code of your single-file Actors or create new ones, then you will have to update your API integration by following the instructions below.
Why deprecate single-file JavaScript Actors?
Because they brought only pain and frustration to developers 😫
The main problem with single-file Actors is the lack of package.json and package-lock.json files so that the versions of your dependencies can (and do) vary in-between builds.
Single-file Actors were built in such a way that they used:
apify and apify-client packages in the version baked into the base docker image
all other packages required in source code in the latest version
When you rebuild the Actor and a new version of the package you were using contained some backward-compatibility breaks, your Actor would break even if you did not change a single line in the source code.
There was no way around this.
What will happen to existing single-file Actors?
They will be converted to their multi-file equivalents. The multi-file version will contain the following files:
Dockerfile - based on the original base docker image
main.js - the original source code
package.json - containing apify and apify-client in latest version (or a specific version if you use a base docker image that is deprecated) and all other required packages in latest version.
This means that if your Actor breaks due to some package version incompatibility, you can now pin its version in package.json.
What should I do with my existing Actors?
You can convert the existing single-file Actors manually in Apify Console, in the source tab of your Actor. The conversion does not influence existing builds in any way, the converted files are only used for new builds.
We'll convert all the remaining Actors by June 1, 2022.
What should I do when using API to create or update single-file Actors?
Switch to multi-file Actors before June 1, 2022. After that, it will no longer be possible to create single-file actors.
Instead of a single-file version with sourceType set to SOURCE_CODE, some sourceCode and baseDockerImage, use version with sourceType set to SOURCE_FILES and add array sourceFiles, which should contain Dockerfile, package.json (if needed) and main.js described above.
You can either create those files on your own or convert existing single-file Actors manually in UI, read the converted version via API and then use sourceFiles when creating similar new Actors - just change the content of main.js (and package.json if you need to add some packages).
Minimal example
When you create single-file Actors via API, you make a POST request to https://api.apify.com/v2/acts with payload such as this: