import
{
RAM,
Display,
HardDisk
} from "computer"
class Computer{
constructor() {
this._ram = new RAM();
this._display = new Display();
this._hardDisk = new HardDisk();
}
...
}
然后您可以像这样更改,例如在源代码树中。
import
{
RAM,
Display,
HardDisk
} from "computer"
// assume you made additional classes, Keyboard, Mouse
import {KeyBoard, Mouse} from "./mysourceTree"
class Computer{
constructor() {
this._ram = new RAM();
this._firstDisplay = new Display();
this._hardDisk = new HardDisk();
this._keyBoard = new Keyboard();
this._mouse = new Mouse();
}
...
}
6条答案
按热度按时间t1rydlwq1#
当然你可以修改
node_modules
中包的内容,因为它是一种标准化的格式。但是,你不应该这样做,因为你应该提交你的修改并重新分发它们。不幸的是,这个问题的解决方案并不简单,这是我过去一直在努力解决的问题。
npm链接
第一种方法是在本地克隆repo,然后使用
npm link
在项目中使用它。这种方法的缺点是,你仍然需要手动下载仓库来使用它,而
npm link
会让你的链接版本成为在你的系统上全局使用的包,这可能会产生意想不到的副作用。也就是说,如果你想在本地测试对你的包所做的更改,并将它们贡献给上游,npm link
可能是最好的方法。使用分叉的git存储库
你也可以通过以下操作直接从派生的git repo安装它:
但是使用这种方法,你需要有证书来访问git repo,因此当你处理私有repo之类的东西时,特别是在CI环境中,会增加额外的复杂性。另外,你应该包含一个commitish,这样你就可以得到可重复的构建--不使用npm链接来开发它是一件痛苦的事情。You can consult the npm documentation for other install options or for more specifics。如果您不必担心上述任何问题,这是一种非常好的方法。
本地npm模块
一旦你做了修改,你也可以像这样把派生的版本安装到你的项目中:
然而,这样一来,你就可以通过git子模块、git子树或使用monorepo等方式有效地将其他NPM项目作为项目的一部分。这对团队来说可能是一个很好的方法,但对你要做的事情来说可能有些过头了,而且你需要考虑大量的工具来使之成为一个好方法。
发布您自己的npm模块
不幸的是,所有以前的方法都假设软件包要么没有构建过程,要么是用npm's postinstall scripts之类的东西自动构建的,然而,一些npm模块是通过发布一个特定的构建目录来编写的,这使得npm上的内容与源代码有很大的不同。
在这些情况下,你需要把你的构建发布到npm可以安装的地方,包括公共的scoped package,私有的npm仓库,或者把你的npm模块发布到个人的artifact服务器。
gudnpqoy2#
您也可以使用修补。
在React Native世界中,这工作得相当可靠--所以我猜它在React世界和许多其他依赖于NPM的世界中也会工作。
修补程序包
是一个可与npm和yarn一起工作的库(注:你可以对本地文件夹、node_modules中的库**(也可以是嵌套的)做补丁,或者只对开发依赖项**应用补丁(在生产构建中忽略补丁)。
链接就在这里:https://www.npmjs.com/package/patch-package
1.制作补丁
首先对node_modules文件夹中特定软件包的文件进行更改,然后运行
如果您尝试修补位于的嵌套软件包,例如node_modules/package/node_modules/another-package,您只需在软件包名称之间添加一个/即可:
它也适用于scoped软件包。
2.“/patches”文件夹
如果这是你第一次使用patch-package,它会在你的应用的根目录中创建一个名为patches的文件夹,里面会有一个名为package-name+0.44.0.patch或类似的文件,这是一个普通的旧package-name和你的修正版本之间的Git diff。
3.与团队共享修补程序
只需将“patches”文件夹中的文件(patches)提交到repo。
4.提示:
如果软件包托管在Github上(并且你已经登录),你可以运行相同的patch-package命令,并使用**--create-issue**param,这样它会自动创建一个pull请求,并在主存储库中应用补丁(这样维护人员就可以修复这些问题):
5.提示:
要还原修补程序,请使用**--reverse**参数运行该命令:
dzjeubhm3#
不建议直接在
node_modules
中修改包,因为当你重新安装包时,你所做的更改将会消失,并且你不能与他人共享你所做的更改。考虑一下,例如在GitHub上派生项目并在那里进行更改,然后将其作为包使用。如果你只是想试验一下,在
node_modules
中修改包仍然有效。如果包的package.json
的main
字段指向一个构建文件,你可能需要将这个字段改为源条目文件,或者在源代码中每次更改后自己构建文件。yzuktlbb4#
对我来说,最好的方法是,正如@Kevin Raoofi所说,克隆软件包并发布我自己的,然后将我的下载到一个特定的文件夹中,那里只有"myNpmPackages"。
然后:
kmpatx3s5#
在我的例子中,我不能接受以上所有的方法,因为我需要做一些小的修改,所以我从node_module文件夹导入了一些必要的类,并在我的源代码树中覆盖了它们。
假设我们需要从安装的node_module中更改类"Computer":电脑。
然后您可以像这样更改,例如在源代码树中。
zkure5ic6#
我正在使用Vite,想对一个包做一些临时编辑,但没有像预期的那样发生任何事情。
原来Vite做了一些缓存,这对我来说是新的,你必须把
--force
传递给start命令,让Vite看到你做的任何node_module
更新。从他们的文档中:
如果出于某种原因,您希望强制Vite重新绑定deps,您可以使用
--force
命令行选项启动dev服务器,或者手动删除node_modules/.vite
缓存目录。