'Copy assets of library with Yarn Plug'n'Play
I have codes to copy assets when building. I'm wondering what's the best way to do the same thing with Yarn Plug'n'Play since node_modules does not exist.
new CopyWebpackPlugin([
{ from: 'node_modules/pdfjs-dist/cmaps/', to: 'static/cmaps/' },
]),
yarn cache dir tells me the directory and also there's a package location in .pnp.js.
["pdfjs-dist", new Map([
["2.0.943", {
packageLocation: path.resolve(__dirname, "../../Library/Caches/Yarn/v3/npm-pdfjs-dist-2.0.943-32fb9a2d863df5a1d89521a0b3cd900c16e7edde/node_modules/pdfjs-dist/"),
Should I somehow parse the file and copy as I did before? Or is there better way?
Solution 1:[1]
In Yarn Plug n' Play, you can get the base path to your from directory using require.resolve('name-of-package'). In this case, it's something like
const path = require('path');
const modulePath = require.resolve('pdfjs-dist');
const fromPath = path.join(modulePath, 'cmaps');
Solution 2:[2]
Using require.resolve is correct, but depending on the package it can result in this error
Error: Qualified path resolution failed: we looked for the following paths, but none could be accessed.
The CopyWebpackPlugin documentation suggests the following snippet when working with yarn workspaces or monorepos.
module.exports = {
plugins: [
new CopyPlugin({
patterns: [
{
from: `${path.dirname(
require.resolve(`${moduleName}/package.json`)
)}/target`,
to: "target",
},
],
}),
],
};
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Cameron Yick |
| Solution 2 | Jonathan Dixon |
