我对composer.lock使用存储库的应用程序感到困惑.
我看到很多人说我们不应该.gitignore composer.lock从存储库中.
如果我在我的开发环境中更新我的库,我将有一个新的,composer.lock但我将无法将它们更新到生产中,是吗?
它不会在这个文件上产生冲突吗?
yarn.lock执行a后,Yarn会创建一个文件yarn install.
这应该提交到存储库还是被忽略?它是为了什么?
我使用Cordova 5.0.0,我有以下项目结构:
MyProject
- hooks
- platforms
- plugins
- resources
- www
- config.xml
Run Code Online (Sandbox Code Playgroud)
我现在的问题是:我可以省略哪些文件夹?我问它是因为我在三个不同的平台上工作.我在Linux上开发用于Android,Windows用于Windows手机和Mac用于ios.如果我提交整个项目,我总是会收到不支持的平台的警告和错误.
我想要的是一个简约的git存储库.
例如,一个问题是插件.当我从存储库中删除插件文件夹时,我必须手动将它们添加到我的每个开发平台上.
另一个问题是资源文件夹.我使用离子自动生成图标和闪屏.当我现在尝试在ios上构建项目时,它正在抱怨android的图像.
那么我需要什么,我可以省略什么?
我有一个Electron应用程序,我正在尝试安装节点模块.当我运行时npm install,它会创建node_modules文件夹,但所有模块都会进入一个名为的子文件夹.staging.每个模块也-xxxxx附加了它,其中x是一些随机字母数字.
我创建的其他电子应用程序从未这样做过.所有节点模块都位于根目录中,node_modules并且没有-xxxxx附加.
知道为什么会这样吗?
要锁定在项目上安装的依赖项的版本,该命令将npm install创建一个名为的文件package-lock.json.这是从Node.js v8.0.0和npm v5.0.0开始的,正如你们中的一些人可能知道的那样.
尽管有关于提交此文件的Node.js和npm建议,但是关于何时应该避免这样做的几个问题也是一种选择.通常我们在项目中承诺,但这是一个特殊的问题.
虽然我们应该package-lock.json默认提交文件,但我们有一个特定的情况我们不应该.举例来说,如果我们要测试的最新版本的项目依赖的,它可以增加一个选项package-lock.json进入.gitignore.
所以,问题如下:
package-lock.json文件添加到.gitignore?将npm package-lock.json置于版本控制之下有什么意义?根据我的经验,这个文件源控制引起了比效率提升更多的麻烦和混乱.
拥有package-lock.json源代码控制下使一个大难题每个人谁添加/删除一个开发者/修改的任何节点模块时需要解决冲突的分支之间.特别是在复杂/大型应用程序上工作,其中package-lock.json可以长达数万行.即使只是吹掉node_modules并运行一个新的,npm install也会在package-lock中产生剧烈的变化.
关于包锁还有其他几个SO问题:
和一个关于包锁的大量对话的GitHub问题:
这让我觉得仍有广泛的不确定因素需要消除.
根据文件
package-lock.json为npm修改node_modules树或package.json的任何操作自动生成.
那你为什么要把一个自动生成的文件放在源代码管理下呢?
上面的GitHub问题详细说明了一些人为了应对与package-lock.json的混淆,如何将npm install脚本更改为rm -f package-lock.json && npm install,这也感觉不正确.
似乎package-lock.json正在努力成为节点模块依赖关系的确切版本的真实来源,但这不正是package.json的功能吗?什么时候解决这个文件中的合并冲突的难以忍受的痛苦开始得到回报?
npm 5介绍了package-lock.json,其中的文档就在这里.
它声明该文件旨在包含在版本控制中,因此任何克隆您的包并安装它的人都将具有相同的依赖版本.换句话说,您不应将其添加到.gitignore文件中.
它没有说明的是该文件是否包含在已发布的包中.这个问题可以改为:应该将package-lock.json包含在.npmignore中吗?
我的设置:
只是尝试运行默认的角度模板:
> npm install -g @angular/cli # this installed the angular version mentioned above
> ng new test # Chose default options for the project
> cd test
> npm ci # lots of error messages
Run Code Online (Sandbox Code Playgroud)
最后一个命令会导致输出中出现很多错误(但不会使命令失败):
> fsevents@1.2.11 install C:\test\node_modules\@angular\compiler-cli\node_modules\fsevents
> node-gyp rebuild
C:\test\node_modules\@angular\compiler-cli\node_modules\fsevents>if not defined npm_config_node_gyp (node "C:\Users\foo\AppData\Roaming\nvm\v12.14.1\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild ) else (node "C:\Users\foo\AppData\Roaming\nvm\v12.14.1\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" rebuild )
gyp ERR! find Python
gyp …Run Code Online (Sandbox Code Playgroud) 我正在使用的脚本部分package.json来强制解决方案:
"preinstall": "npx npm-force-resolutions"
Run Code Online (Sandbox Code Playgroud)
在分辨率部分,我输入graceful-fs了指定的版本:
"resolutions": {
"graceful-fs": "^4.2.4",
},
Run Code Online (Sandbox Code Playgroud)
当我运行npm i一切都正确安装时,会考虑设置版本。但是后来当我安装一个额外的模块时,例如npm i random-package,我的设置版本被扔掉了,我最终得到graceful-fs@1.2.3了一些依赖项中的其他低版本。
如果我清除 node_modules 文件夹并npm i再次运行,一切都会再次正常。
我还尝试将分辨率设置得更具体,例如
"resolutions": {
"glob/**/graceful-fs": "^4.2.4",
},
Run Code Online (Sandbox Code Playgroud)
但这无济于事。
我也试过:
但没有运气。
我错过了什么?
npm ×6
node.js ×5
gitignore ×3
git ×2
npm-install ×2
package.json ×2
angular ×1
composer-php ×1
cordova ×1
dependencies ×1
electron ×1
javascript ×1
npm-ci ×1
npm-scripts ×1
npmignore ×1
yarnpkg ×1