Bullet stays in place, but I want it to move

Hello. I wanted to program an enemy who is following my player and shooting at it. The player following part works, but when it shoots the bullets stay in place. Bullet has a Collider which is set to trigger. And the Player has tag - Player assigned to it
Here is the script for the bullet:

public float speed;
private Transform player;
private Vector2 target;

void Start()
{
player = GameObject.FindGameObjectWithTag(“Player”).transform;
target = new Vector2(player.position.x, player.position.y);
}

// Update is called once per frame
void Update()
{
    //Move projectile towards
    //Ja gribam lai lode seko transform.position = Vector2.MoveTowards(transform.position, player.position, speed * Time.deltaTime);

    transform.position = Vector2.MoveTowards(transform.position, target, speed * Time.deltaTime);
    if(transform.position.x == target.x && transform.position.y == target.y){
        DestroyProjectile();
    }
}

void OnTriggerEnter2D(Collider2D other){
   if(other.CompareTag("Player")){
       DestroyProjectile();
}
}
void DestroyProjectile(){
    Destroy(gameObject);
}

}

And here is the script for the enemy:

public float speed;
public float stoppingDistance;
public float retreatDistance;
private float timeBtwShots;
public float startTimeBtwShots;
public GameObject projectile;
public Transform player;

// Start is called before the first frame update
void Start()
{
    player = GameObject.FindGameObjectWithTag("Player").transform;
    timeBtwShots = startTimeBtwShots;
}

// Update is called once per frame
void Update()
{
    //Checking distance between enemies
    if(Vector2.Distance(transform.position, player.position) > stoppingDistance)
    {
        //Move enemy towards player
        transform.position = Vector2.MoveTowards(transform.position, player.position, speed * Time.deltaTime);
    //Check if the distance is smaller and make sure if enemy isnt too near to the player
    } else if(Vector2.Distance(transform.position, player.position) < stoppingDistance && Vector2.Distance(transform.position, player.position) > retreatDistance){
        //Too near enemy will stop moving
        transform.position = this.transform.position;
    //if distance is smaller than retreat Back away
    } else if(Vector2.Distance(transform.position, player.position) < retreatDistance){

        transform.position = Vector2.MoveTowards(transform.position, player.position, -speed * Time.deltaTime);
    }

    // Shootig
    if(timeBtwShots <= 0){
        Instantiate(projectile, transform.position, Quaternion.identity);
        timeBtwShots = startTimeBtwShots;
    } else {
        timeBtwShots -= Time.deltaTime;
    }
}

}

Start(); is called only once and target is a Vector2 which you are assigning at the Start with the position of the player on that instant

 public float speed;
 private Transform player;
 private Vector2 target;
 
 void Start() { 
     player = GameObject.FindGameObjectWithTag("Player").transform; 
     target = new Vector2(player.position.x, player.position.y); 
 }

Then here:

transform.position = Vector2.MoveTowards(transform.position, target, speed * Time.deltaTime);

you try to move the bullet to that target wich will remaing always at the same value since you never update it, an easy fix is before doing the Vector2.MoveTowards assing the target to the current position of the player target = player.position;

Result will be:

void Update()
 {
     //Move projectile towards
     //Ja gribam lai lode seko transform.position = Vector2.MoveTowards(transform.position, player.position, speed * Time.deltaTime);
	 target = player.position;
     transform.position = Vector2.MoveTowards(transform.position, target, speed * Time.deltaTime);
     if(transform.position.x == target.x && transform.position.y == target.y){
         DestroyProjectile();
     }
 }