npm 5今天发布,其中一项新功能包括创建package-lock.json文件的确定性安装.
这个文件应该保存在源代码管理中吗?
我假设它类似于,yarn.lock并且composer.lock两者都应该保留在源代码控制中.
我想使用grunt-contrib-jasmineNPM包.它有各种依赖.依赖图的一部分如下所示:
?? grunt-contrib-jasmine@0.4.1
? ??? grunt-lib-phantomjs@0.2.0
? ? ??? phantomjs@1.8.2-2
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个版本中存在一个错误phantomjs,导致它无法在Mac OS X上正确安装.这在最新版本中已得到修复.
我怎样才能grunt-lib-phantomjs使用更新的版本phantomjs?
一些额外的背景:
grunt-contrib-jasmine明确要求版本"~0.2.0"的grunt-lib-phantomjs,其中明确要求版本"~1.8.1"的phantomjs.phantomjs到我的包的依赖项没有任何效果; 两个版本都已安装并grunt-contrib-jasmine仍然使用旧版本(请参阅:使用NPM安装软件包时,是否可以告诉它使用其中一个依赖项的不同版本?).我正在尝试运行npm install,这是从控制台输出:
npm ERR! Linux 4.8.0-27-generic
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! node v6.9.1
npm ERR! npm v3.10.8
npm ERR! Maximum call stack size exceeded
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR! <https://github.com/npm/npm/issues>
Run Code Online (Sandbox Code Playgroud)
这是以下内容npm-debug.log:
113791 verbose stack RangeError: Maximum call stack size exceeded
113791 verbose stack at Object.color (/usr/lib/node_modules/npm/node_modules/npmlog/node_modules/console-control-strings/index.js:115:32)
113791 verbose stack at EventEmitter.log._format (/usr/lib/node_modules/npm/node_modules/npmlog/log.js:252:51)
113791 verbose stack at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/node_modules/npmlog/log.js:138:24)
113791 verbose stack at …Run Code Online (Sandbox Code Playgroud) 刚刚从3点到5点更新,以使用此功能.
对不起,我一定错过了一些非常明显的东西,但是如何在安装时让npm尊重package-lock.json文件中的固定版本?
假设我有package.json一些过时的套餐.做一个npm install会吸引新的东西,打破我的应用程序.
例如,我想要稳定的主要包是bootstrap- 我想暂时在bootstrap@4.0.0-alpha.6上阻止它的版本,但是npm install找到4.0.0-beta.28.
如果我有npm update任何包,package-lock.json会更新.
这是我的boot.rap的package.json条目:
"bootstrap": "^4.0.0-alpha.6"
这就是我对已安装的软件包和元数据的看法:
$ npm list 2>/dev/null | grep bootstrap
??? bootstrap@4.0.0-alpha.6
??? bootstrap-vue@0.16.1
? ??? bootstrap@4.0.0-alpha.6 deduped
(env) jluc@py$ grep bootstrap package.json package-lock.json
package.json: "bootstrap": "^4.0.0-alpha.6",
package.json: "bootstrap-vue": "^0.16.1",
package-lock.json: "bootstrap": {
package-lock.json: "version": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.0.0-alpha.6.tgz",
package-lock.json: "bootstrap-vue": {
package-lock.json: "version": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-0.16.1.tgz",
package-lock.json: "bootstrap": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.0.0-alpha.6.tgz",
Run Code Online (Sandbox Code Playgroud)
看起来不错.Lock是bootstrap-4.0.0-alpha.6.
npm audit fix旨在自动升级/修复 npm 包中的漏洞。但是,我还没有发现它究竟做了什么来修复这些漏洞。
我认为这npm audit fix会将依赖项和依赖项的依赖项升级到包的 semver 定义允许的最新版本——实际上与rm package-lock.json; npm install. 但是npm audit fix在锁定文件删除+重新安装后仍然会执行很多更改。
究竟是npm audit fix做什么的?例如,它是否安装了比相应package.json(但仍与 semver 兼容)允许的版本更新的依赖项版本?
要锁定在项目上安装的依赖项的版本,该命令将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?一切都在与我的客户合作,直到我试图通过将我的客户服务从升级到,使用并再次构建它来解决一些网络断开连接的问题。react-scriptsdocker3.0.13.3.0npm install <package> --save
但后来它开始抱怨需要css-loader和style-loader,我安装了它们。然后它不起作用,我将我的设置恢复为3.0.1,卸载带有--save标志的以前的两个包,以便从中删除它node_modules/。
现在,当我运行时docker-compose -f docker-compose-dev.yml build client,虽然构建了客户端服务,但出现以下错误:
> fsevents@1.2.11 install /usr/src/app/node_modules/chokidar/node_modules/fsevents
> node-gyp rebuild
gyp info it worked if it ends with ok
gyp info using node-gyp@3.8.0
gyp info using node@11.12.0 | linux | x64
gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env …Run Code Online (Sandbox Code Playgroud) 我在 Android 文件夹中运行 React Native 捆绑包版本时收到以下错误。我尝试更新 Expo 并安装旧版本,但仍然遇到相同的错误。不确定下一步要尝试什么?
./gradlew bundleRelease --stacktrace
Run Code Online (Sandbox Code Playgroud)
结果出现以下错误
* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating script.
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:93)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.lambda$apply$0(DefaultScriptPluginFactory.java:133)
at org.gradle.configuration.DefaultScriptTarget.addConfiguration(DefaultScriptTarget.java:74)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:136)
at org.gradle.configuration.BuildOperationScriptPlugin$1.run(BuildOperationScriptPlugin.java:65)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
at org.gradle.configuration.BuildOperationScriptPlugin.lambda$apply$0(BuildOperationScriptPlugin.java:62)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:43)
at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:62)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyScript(DefaultObjectConfigurationAction.java:149)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$000(DefaultObjectConfigurationAction.java:42)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$1.run(DefaultObjectConfigurationAction.java:75)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:183)
at org.gradle.api.internal.project.AbstractPluginAware.apply(AbstractPluginAware.java:49)
at org.gradle.api.internal.project.ProjectScript.apply(ProjectScript.java:37)
at org.gradle.api.Script$apply.callCurrent(Unknown Source)
at build_9e9o1sx2v1y7pbwabnmzhlvko.run(/Users/anderbard/Development/cloversocial/MyApp/node_modules/react-native-reanimated/android/build.gradle:111)
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:91)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.lambda$apply$0(DefaultScriptPluginFactory.java:133)
at org.gradle.configuration.ProjectScriptTarget.addConfiguration(ProjectScriptTarget.java:77) …Run Code Online (Sandbox Code Playgroud) 当我在项目中运行"npm install"时,它经常修改package-lock.json,例如,如果我从另一台计算机(具有不同节点或npm版本)处理同一项目.
但与此同时,文档建议该文件应该添加到版本控制(在我的情况下为git):
https://docs.npmjs.com/files/package-lock.json
此文件旨在提交到源存储库,并用于各种目的:...
那么我应该在切换工作机器时或者在其他人的情况下来回提交npm所做的更改npm install吗?这将是一场噩梦.
目前我只是放弃了由npm对package-lock.json所做的任何更改,并且它一直正常工作.所以我不妨把它添加到.gitignore ......
我做错了吗?我应该用npm ci吗?我不会把我的电脑称为"CI",它只是一台开发机器,我为什么要在那里使用它?
基本上我和这位先生有同样的问题:
https://github.com/npm/npm/issues/18103#issuecomment-370401935
(遗憾的是,我无法在该问题上添加评论或根本无法创建新问题,npm repo已禁用问题)
我们的构建管道是npm install-> npm test-> 压缩工件。
然而,这意味着我们的工件包含所有 devDependency。如果我们这样做,npm --only=production我们会丢失 devDependency 但npm test会失败。
我们如何在没有devDependency 的情况下生成经过测试的工件?我们是否只需要相信我们的应用程序在使用它们进行测试后就能在没有 devDependency 的情况下运行?
额外问题:应该如何npm ci适应这个工作流程?
我已经使用该ng update工具将我的 Angular 项目从 8 升级到了 9 。在本地(Windows)一切正常,但是当我尝试在 docker 中构建项目时,出现以下错误:
Step 6/11 : RUN npm run build
---> Running in d60f739a56f6
> check-it-frontend@0.0.0 build /app
> ng build --prod
Compiling @angular/core : es2015 as esm2015
ERROR in EINVAL: invalid argument, rename '/app/node_modules/@angular/core/core.d.ts' -> '/app/node_modules/@angular/core/core.d.ts.__ivy_ngcc_bak'
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! check-it-frontend@0.0.0 build: `ng build --prod`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the check-it-frontend@0.0.0 build script.
npm ERR! This is …Run Code Online (Sandbox Code Playgroud) 网上有很多人用不同的方式问同样的问题,但没有明确的答案。任何人都可以理解到足以解释为什么docker build当package-lock.json应用程序中存在文件时会失败,而当文件不存在时会成功运行吗?貌似跟npm有关,但是不清楚。
每个人都说删除package-lock.json,但它存在是有原因的。
注意: npm install在我的本地机器上工作正常,只是在 docker 容器中失败。
如果我有这个 Dockerfile:
# First Stage: Builder
FROM node:13.12.0-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
Run Code Online (Sandbox Code Playgroud)
并运行这个:
docker build -t container-tag ./
Run Code Online (Sandbox Code Playgroud)
我明白了:
npm WARN tar ENOENT: no such file or directory, open '/app/node_modules/.staging/eventsource-c2615740/example/index.html'
npm WARN tar ENOENT: no such file or directory, open '/app/node_modules/.staging/eventsource-c2615740/example/sse-client.js'
npm WARN tar ENOENT: no such file or directory, open …Run Code Online (Sandbox Code Playgroud) npm ×10
node.js ×8
docker ×3
git ×2
javascript ×2
angular ×1
expo ×1
gitignore ×1
lockfile ×1
npm-audit ×1
package.json ×1
react-native ×1
typescript ×1