使用yarn + webpack从fork安装npm包 - 无法解析'./dist/'
使用yarn + webpack从fork安装npm包 - 无法解析'./dist/'
我想为一个开源的React组件做贡献,并且我想在我的webpack捆绑包中使用该项目的一个分支。\n我正在使用yarn,并尝试使用以下命令安装我的分支:\n
yarn add github:Startouf/react-coverflow
\n然而,当webpack尝试编译我的捆绑包时,它会出现奇怪的错误:\n
ERROR in ./~/react-coverflow/main.js Module not found: Error: Can't resolve './dist/react-coverflow' in '/Users/Cyril/dev/MyApp/client/node_modules/react-coverflow'
\n我错过了什么吗?\n编辑:当我使用npm发布的包时,节点模块文件夹中包含以下内容:\n
LICENSE README.md dist main.js package.json
\n当我使用我的分支时,似乎项目没有编译,包含以下内容:\n
LICENSE README.md package.json src webpack.config.js Makefile main.js site test
\n看起来我错过了一步... 我以为使用yarn add加上github分支会自动发布,但看起来我错了?
问题:使用yarn + webpack从GitHub上的分支安装npm包时出现"Can't resolve './dist/"的错误。
原因:在安装过程中,没有执行构建步骤,导致无法解析"./dist/"路径。
解决方法:需要更新包,添加一个名为prepare
的步骤。可以在package.json#scripts
中自己添加prepare
脚本来运行构建。然后Npm和Yarn在直接从GitHub安装时会自动运行prepare脚本。之后就可以像处理其他包一样使用它,它将始终正常工作。同时,不要忘记在package.json#files
部分添加相应内容。
不确定为什么,但对我来说这个方法不起作用。我不得不添加一个install步骤。
你能详细说明一下什么没起作用吗?你是否添加了files部分?
当你将自己的分支作为存储库版本指定时,比如'"some-package": "mygitusername/some-package#my-branch-withfix"`时,在运行yarn install时不会执行prepare步骤。prepare是在上传到npm之前运行的。但install确实会运行。但要注意,我是新手,可能漏掉了什么东西。
嗯,看起来Yarn决定放弃对prepare的支持。他们似乎希望你使用prepack来代替。这在Npm中也可以工作。这可能是一个更通用的解决方案。
算了吧。prepack不能在Npm中工作。我不确定如何才能在当前版本的Yarn中使其工作...
哇,我甚至不确定如何才能稳定地让Yarn运行prepack脚本... Yarn 2/3在这方面增加了很多混乱。
以上就是解决从GitHub上的分支使用yarn + webpack安装npm包时出现"Can't resolve './dist/"的问题的原因和解决方法。
使用fork作为源直接安装npm包可能会导致执行错误。这是因为它根本没有进行打包,而该包需要在"dist"中存在一个预构建版本。打包脚本通常在发布到npm之前执行。
一些解决方法是:
- 在目标目录中执行预发布步骤(这取决于项目使用的内容)
- 当然,使用已发布的版本是最好的。在npm上创建自己的包并上传。
参考资料:npm issue
谢谢!我只是在编辑中添加这些信息,我将查看你的链接。如果只是为了调试,我可以在本地运行脚本,但是在PR通过之前,我将保留自己的fork,所以我想如果我想在生产中使用它的话,我必须像你说的那样发布我的包:'(
你能详细说明一下预发布所需的步骤吗?我尝试在node_module目录中执行cd,运行"yarn"和package.json中的"yarn run prerelease"。我目前卡在构建项目上,因为它使用注释,而我显然没有预处理器,但我想检查一下我是否做对了。
"prerelease"应该可以完成工作。你目前遇到的错误是什么?
实际上,我正试图在我的一个webpack应用程序的node_module文件夹中直接构建预发布版本。在那里没有成功(抱怨来自Radium的注释),但是当我尝试在一个单独的文件夹中克隆存储库并运行yarn时,它完美运行。所以我想我只需在新目录中进行更改,然后在组件准备好后发布它。
还有最后一点给未来的读者,我最终使用npm发布了我的新包,因为yarn的发布对我来说有问题(参见github.com/yarnpkg/yarn/issues/3145)
现在一个很好的解决方案是只需在scripts部分添加"prepare": "npm run build"。这将在从git URL安装包时运行。参见:- github.com/npm/npm/issues/3055#issuecomment-304698029 - docs.npmjs.com/misc/scripts, - stackoverflow.com/a/50490565/47185