有没有办法强制npm生成package-lock.json?

时间:2017-10-09 19:39:25

标签: node.js npm package-lock.json

我意外删除了它,并且自package.json以来对npm install做了很多更改。 npm updatepackage-lock.json不再生成package-lock.json。我尝试清除我的npm缓存和我的nvm缓存,但似乎没有任何工作。我尝试了几个版本的节点(6.10.3节点 - 3.10.10 npm是我希望它可以工作的),它不适用于任何版本。

有没有人有办法强制npm生成import UIKit import Contacts import ContactsUI class ThirdViewController: UIViewController, CNContactPickerDelegate { @IBOutlet weak var lblDetails: UILabel! @IBOutlet weak var backTextField: UITextView! @IBAction func btnSelectContact(_ sender: Any) { let entityType = CNEntityType.contacts let authStatus = CNContactStore.authorizationStatus(for:entityType) if authStatus == CNAuthorizationStatus.notDetermined { let contactStore = CNContactStore.init() contactStore.requestAccess(for: entityType, completionHandler: {(success, nil) in if success { self.openContacts() } else { print("not authorized") } }) } else if authStatus == CNAuthorizationStatus.authorized { self.openContacts() } } func openContacts() { let contactPicker = CNContactPickerViewController.init() contactPicker.delegate = self as CNContactPickerDelegate self.present(contactPicker, animated: true, completion: nil) } func contactPickerDidCancel(_picker: CNContactPickerViewController) { _picker.dismiss(animated: true) { } } func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) { // when a contact is selected get the full name let fullName = "\(contact.givenName) \(contact.familyName)" // the following gets the email address from contact var email = "No Email Address Found" if !contact.emailAddresses.isEmpty { let emailString = (((contact.emailAddresses[0] as AnyObject).value(forKey: "labelValuePair") as AnyObject).value(forKey: "value")) email = emailString! as! String } // start of adding postaladdresses var streetAddress = "No Postal Address Found" if !contact.postalAddresses.isEmpty { let streetAddressString = (((contact.postalAddresses[0] as AnyObject).value(forKey: "labelValuePair") as AnyObject).value(forKey: "value")) streetAddress = streetAddressString! as! String } // end of postal addresses // the following takes the information and populates a label on the view controller self.lblDetails.text = "\(fullName)\n\(email)\n\(streetAddress)" // \n\(streetName) } } 文件?

7 个答案:

答案 0 :(得分:65)

默认情况下,只要您运行package-lock.json,就会更新npm install。但是,可以通过在package-lock=false中设置~/.npmrc来全局禁用此功能。

当全局package-lock=false设置处于活动状态时,您仍然可以通过运行来强制更新项目的package-lock.json文件:

npm install --package-lock

此命令是强制package-lock.json更新的唯一可靠方法。

答案 1 :(得分:11)

评论中回答了这个问题; package-lock.jsonnpm v5及更高版本中的一项功能。 npm shrinkwrap是您在npm的所有版本中创建锁文件的方式。

答案 2 :(得分:8)

在npm 6.x中,您可以使用

npm i --package-lock-only

根据https://docs.npmjs.com/cli/install.html

  

-package-lock-only参数仅更新package-lock.json,而不检查node_modules和下载依赖项。

答案 3 :(得分:1)

正如几个答案所解释的,您应该运行:

npm i

是否不能解决...

检查您的npm可执行文件的版本。(对我来说,这是3.x.x,它根本不使用package-lock.json

npm -v

它应该至少为5.x.x introduced package-lock.json文件。)

要在Lunix上更新npm,请遵循these说明。

有关包文件的更多详细信息,请阅读this medium故事。

答案 4 :(得分:0)

每当你运行npm i时都会重新生成package-lock.json。

答案 5 :(得分:0)

如果您的 npm 版本比版本5 低,则安装更高的版本以自动生成 package-lock .json

示例:将您当前的 npm 升级到6.14.0版

npm i -g npm@6.14.0

您可以通过

查看最新的 npm 版本列表
npm view npm versions

答案 6 :(得分:-1)

当使用本地包时,我发现可靠地重新生成 package-lock.json 文件的唯一方法是删除它,以及在链接的模块和所有相应的 node_modules 文件夹中,让它使用 {{1 }}