Skip to content

Conversation

@steciuk
Copy link

@steciuk steciuk commented Dec 9, 2023

When the export field is missing vitest is using CommonJS version of the package even if the module key is specified which leads to problems with importing vitest from inside the package in a ESM project.

For example using:

chrome.runtime.connect('test');

leads to:

TypeError: Cannot read properties of undefined (reading 'fn')
 ❯ addFunction node_modules/vitest-chrome/src/add-elements.ts:73:12
 ❯ Object.get node_modules/vitest-chrome/src/createHandler.ts:64:20

See: vitest-dev/vitest#4233

@DanielRivers
Copy link

Would love for this to be merged.

@frontendphil
Copy link

I was literally about to open the exact same PR. This would be great!

aspiers pushed a commit to aspiers/vitest-chrome that referenced this pull request Jan 1, 2025
It is convenient to be able to specify dependencies in package.json
which point to particular git commits.  One use case is allowing
dependencies on PRs which are not yet merged and published to npm.org,
such as

    probil#1

in order to obtain functioning ESM support.

In theory this should be achievable via:

    "vitest-chrome": "probil/vitest-chrome#5fb1634b"

https://docs.npmjs.com/cli/v8/configuring-npm/package-json#git-urls-as-dependencies
states:

> When installing from a git repository, the presence of certain fields
> in the package.json will cause npm to believe it needs to perform a
> build. To do so your repository will be cloned into a temporary
> directory, all of its deps installed, relevant scripts run, and the
> resulting directory packed and installed.
>
> This flow will occur if your git dependency uses workspaces, or if
> any of the following scripts are present:
>
>   build
>   prepare
>   prepack
>   preinstall
>   install
>   postinstall

However it seems that, at least with pnpm, the presence of a "build"
step is not sufficient.

So add a "prepare" step which just dispatches to the "build" step.
This makes vitest-chrome installable via a git dependency.
aspiers pushed a commit to aspiers/vitest-chrome that referenced this pull request Jan 1, 2025
It is convenient to be able to specify dependencies in package.json
which point to particular git commits.  One use case is allowing
dependencies on PRs which are not yet merged and published to npm.org,
such as

    probil#1

in order to obtain functioning ESM support.

In theory this should be achievable via:

    "vitest-chrome": "probil/vitest-chrome#5fb1634b"

https://docs.npmjs.com/cli/v8/configuring-npm/package-json#git-urls-as-dependencies
states:

> When installing from a git repository, the presence of certain fields
> in the package.json will cause npm to believe it needs to perform a
> build. To do so your repository will be cloned into a temporary
> directory, all of its deps installed, relevant scripts run, and the
> resulting directory packed and installed.
>
> This flow will occur if your git dependency uses workspaces, or if
> any of the following scripts are present:
>
> - `build`
> - `prepare`
> - `prepack`
> - `preinstall`
> - `install`
> - `postinstall`

However it seems that, at least with pnpm, the presence of a `build`
step is not sufficient.

So add a `prepare` step which just dispatches to the `build` step.
This makes vitest-chrome installable via a git dependency.
@fregante
Copy link

Since this package is abandoned, here's the fix:

import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    setupFiles: ['./source/vitest.setup.js'],
  },
  resolve: {
    alias: {
      'vitest-chrome': import.meta.resolve('vitest-chrome/lib/index.esm.js'),
    },
  },
});

and then place this in your setup file:

import {chrome} from 'vitest-chrome';

globalThis.chrome = chrome;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants