是否可以在modules文件夹中更改npm模块的代码?我认为这不是推荐的做法,还有其他方法可以实现吗?目前,我尝试更改模块目录中的代码,但更改似乎并不适用。提前致谢。
答案 0 :(得分:5)
您当然可以更改node_modules
中软件包的内容,因为它是标准格式。但是,您不应该这样做,因为您应该提交更改并重新分发。
不幸的是,解决这个问题的方法并不简单,这是我过去一直在努力的事情。
第一种方法是在本地克隆存储库,并使用npm link
在您的项目中使用它。
npm link ../path/to/my/proj
此方法的缺点是,您仍然必须手动下载存储库才能使用它,并且npm link
使链接版本 the 包可以在系统上全局使用,这可能是意料之外的副作用。话虽这么说,npm link
可能是最好的方法,如果您想在本地测试对程序包的更改并将其贡献给上游。
您还可以通过以下操作直接从叉状git存储库中安装它:
npm install --save $GIT_REPO_URL
但是,使用这种方法时,您需要具有访问git repo的凭据,因此,在处理私有存储库等时,尤其是在处理CI环境时,会带来额外的复杂性。另外,您应该包含一个commitish,以便您可以获取可复制的内部版本;但是,在不使用npm链接的情况下进行开发很麻烦。 You can consult the npm documentation for other install options or for more specifics。 如果您不必担心任何这些事情,这是一个很好的方法。
完成更改后,还可以像这样将分叉的版本安装到项目中:
npm install --save ../path/to/my/proj
但是,然后,您将有效地使另一个NPM项目成为项目的一部分,并使用git子模块,git子树或使用monorepo。对于团队来说,这可能是一个很好的方法,但是对于您要尝试做的事情来说,这可能是过大的选择,并且您需要认真思考很多工具才能使它成为一个好的方法。
不幸的是,所有现有方法都假设这些软件包没有构建过程,或者它们是使用npm's postinstall scripts之类的东西自动构建的。但是,某些npm模块是通过发布特定的构建目录编写的,这使得npm上的内容与源代码显着不同。
在这种情况下,您需要将内部版本发布到npm可以从其安装的位置。这包括公共scoped package,私有npm存储库或将npm模块发布到个人工件服务器之类的东西。
答案 1 :(得分:1)
不建议直接在node_modules
中修改软件包,因为重新安装软件包时更改将消失,并且您无法与他人共享更改。考虑例如在GitHub上分叉该项目并在那里进行更改,然后将其用作软件包。
如果您只想尝试,它仍然可以修改node_modules
中的软件包。如果包的main
的{{1}}字段指向构建文件,则您可能不得不将此字段更改为源条目文件,或者在源代码每次更改后自行构建文件。>
答案 2 :(得分:1)
对我来说,最好的方法是,就像@Kevin Raoofi 所说的那样,克隆包并发布我自己的包,然后将我的包下载到特定文件夹中,其中只有“myNpmPackages”。
那么: