Sometimes you want to test the latest version of Docusaurus on a third-party project via `npm` or `yarn` without having to publish it to npm itself. For example, you may want to use the latest code in `main`. > If you want to use Docusaurus to test Docusaurus, see the [testing changes on Docusaurus itself doc](./testing-changes-on-Docusaurus-itself.md) There are two reasonable ways to use a local version of the Docusaurus npm package to test changes you make to the Docusaurus core on a third-party project. ## Install from a local Docusaurus repo ### Install in an existing project Let's say you have an existing project with this snippet inside package.json: ```json { "dependencies": { "@docusaurus/core": "^2.0.0-beta.8", "@docusaurus/preset-classic": "^2.0.0-beta.8" } } ``` Now, you have made changes to @docusaurus/core (this lives in packages/docusaurus) and would like to test the changes. In the local docusaurus repo, run `yarn install`. This will also build the local docusaurus packages and install them within the repo itself: ```sh cd /path/to/local/docusaurus # can use yarn build:packages if dependencies have not been modified yarn install ``` In the existing project, add the local package: ```sh cd /path/to/existing/project # this can be an absolute or relative path yarn add @docusaurus/core@../../local/docusaurus/packages/docusaurus ``` Check package.json again and you will find this: ```json { "dependencies": { "@docusaurus/core": "../../local/docusaurus/packages/docusaurus", "@docusaurus/preset-classic": "^2.0.0-beta.8" } } ``` If you make further changes to the local docusaurus repo, run `yarn install` inside the existing project so that the changes will be applied. Note that: - The format is `scoped-package-name@local/path/to/specific/package/directory`. - The last component of the supplied path cannot be a symbolic link, it has to be the package directory itself. - If you supplied the wrong directory name, `yarn add` may not complain, but `yarn build` and `yarn start` will fail. To avoid this, check `package.json` inside the package directory to make sure you have the correct path. - These commands don't work: ``` yarn add @docusaurus/core@../../local/docusaurus/node_modules/@docusaurus/core yarn add file:../../local/docusaurus/packages/docusaurus yarn add link:../../local/docusaurus/packages/docusaurus yarn add ../../local/docusaurus/node_modules/@docusaurus/core yarn add ../../local/docusaurus/packages/docusaurus ``` - You cannot use `npm install` instead of `yarn add` for this purpose. - `yarn link` is very likely to fail with react, unless you also manually link react. See https://github.com/facebook/react/issues/14257. ## Use Verdaccio Verdaccio is a good local npm server that you can use to test your packages. We have a script `test:build:website` that starts a docker with verdaccio, publishes the packages, and initializes a new website in the parent directory. Alternatively, to install a package in the existing project, after you have started the verdaccio service, run ```bash npm_config_registry="http://localhost:4873" yarn install @docusaurus/core@"2.0.0-beta.8.NEW" # The version should be the latest ``` You can refer to [the implementation](./scripts/test-release.sh) for more details. If you don't have docker, you can still invoke the CLI manually to start the service. ```bash npx verdaccio --listen 4873 --config admin/verdaccio.yaml ```