async def METHOD_NAME(req: NodeJsProjectEnvironmentProcess) -> Process:
    lockfile_digest, project_digest = await MultiGet(
        Get(Digest, PathGlobs, req.env.resolve.get_lockfile_glob()),
        Get(Digest, MergeDigests, req.env.project.get_project_digest()),
    )
    merged = await Get(Digest, MergeDigests((req.input_digest, lockfile_digest, project_digest)))
    if not req.env.project.single_workspace and req.env.target:
        target = req.env.ensure_target()
        args = (
            req.env.project.workspace_specifier_arg,
            target[NodePackageNameField].value,
            *req.args,
        )
    else:
        args = tuple(req.args)
    output_files = req.output_files
    output_directories = req.output_directories
    per_package_caches = FrozenDict(
        {
            key: os.path.join(req.env.package_dir(), value)
            for key, value in req.per_package_caches.items()
        }
    )
    return await Get(
        Process,
        NodeJSToolProcess,
        NodeJSToolProcess(
            tool=req.env.project.package_manager,
            tool_version=req.env.project.package_manager_version,
            args=args,
            description=req.description,
            level=req.level,
            input_digest=merged,
            working_directory=req.env.root_dir,
            output_files=output_files,
            output_directories=output_directories,
            append_only_caches=FrozenDict(**per_package_caches, **req.env.project.extra_caches()),
            timeout_seconds=req.timeout_seconds,
            project_digest=project_digest,
            extra_env=FrozenDict(**req.extra_env, **req.env.project.extra_env()),
        ),
    )