วิธีการตั้งค่าสภาพแวดล้อมผ่าน "ng บริการ" ใน Angular 6


169

ฉันกำลังพยายามอัปเดตแอป Angular 5.2 เป็น Angular 6 ฉันทำตามคำแนะนำในคู่มือการอัปเดต Angular เรียบร้อยแล้ว (รวมถึงการอัปเดตangular-cliเป็น v6) และตอนนี้ฉันกำลังพยายามให้บริการแอปผ่านทาง

ng serve --env=local

แต่นี่ทำให้ฉันเกิดข้อผิดพลาด:

ตัวเลือกที่ไม่รู้จัก: '--env'

ฉันใช้หลายสภาพแวดล้อม ( dev/local/prod) และนี่คือวิธีการทำงานใน Angular 5.2 ฉันจะตั้งค่าสภาพแวดล้อมใน Angular 6 ได้อย่างไร


1
มันเป็น v6, คุณอัพเดทangular-cliพร้อมกับแอพทั้งหมดดังนั้นฉันคิดว่ามันชัดเจน:]
Martin Adámek

5
มีประโยชน์มากมาร์ติน ขอบคุณที่แบ่งปันข้อมูลเชิงลึกของคุณ ในความเป็นจริงมันไม่ได้ชัดเจนน้อยที่สุด
Maxxx

คำตอบ:


304

คุณต้องใช้configurationตัวเลือกใหม่(ใช้ได้กับng buildและng serveเช่นกัน)

ng serve --configuration=local

หรือ

ng serve -c local

หากคุณดูที่angular.jsonไฟล์ของคุณคุณจะเห็นว่าคุณสามารถควบคุมการตั้งค่าสำหรับการกำหนดค่าแต่ละอย่างได้ดีขึ้น (aot, optimizer, ไฟล์สภาพแวดล้อม, ... )

"configurations": {
  "production": {
    "optimization": true,
    "outputHashing": "all",
    "sourceMap": false,
    "extractCss": true,
    "namedChunks": false,
    "aot": true,
    "extractLicenses": true,
    "vendorChunk": false,
    "buildOptimizer": true,
    "fileReplacements": [
      {
        "replace": "src/environments/environment.ts",
        "with": "src/environments/environment.prod.ts"
      }
    ]
  }
}

คุณสามารถรับข้อมูลเพิ่มเติมได้ที่นี่สำหรับการจัดการการกำหนดค่าเฉพาะสภาพแวดล้อม

ตามที่ระบุไว้ในการตอบกลับอื่น ๆ ด้านล่างหากคุณต้องการเพิ่ม 'สภาพแวดล้อม' ใหม่คุณต้องเพิ่มการกำหนดค่าใหม่ให้กับงานสร้างและขึ้นอยู่กับความต้องการของคุณในการให้บริการและทดสอบงานด้วย

การเพิ่มสภาพแวดล้อมใหม่

แก้ไข : เพื่อให้ชัดเจนต้องระบุการแทนที่ไฟล์ในbuildส่วน ดังนั้นหากคุณต้องการใช้ng serveกับenvironmentไฟล์เฉพาะ(พูดdev2 ) คุณต้องแก้ไขbuildส่วนเพื่อเพิ่มการกำหนดค่าdev2ใหม่ก่อน

"build": {
   "configurations": {
        "dev2": {

          "fileReplacements": [
            {
              "replace": "src/environments/environment.ts",
              "with": "src/environments/environment.dev2.ts"
            }
            /* You can add all other options here, such as aot, optimization, ... */
          ],
          "serviceWorker": true
        },

จากนั้นแก้ไขserveส่วนของคุณเพื่อเพิ่มการกำหนดค่าใหม่เช่นกันชี้ไปที่การกำหนดค่าdev2 ที่ buildคุณเพิ่งประกาศ

"serve":
      "configurations": {
        "dev2": {
          "browserTarget": "projectName:build:dev2"
        }

จากนั้นคุณสามารถใช้ng serve -c dev2ซึ่งจะใช้ไฟล์กำหนดค่า dev2


คุณรู้หรือไม่ว่าเป็นไปได้ที่จะเพิ่ม base-href ในการกำหนดค่าด้วยหรือไม่ หรือเพียงแค่ในการสร้าง --c การแสดงละคร --base-href = / yyy /
Eduardo Tolino

@EduardoTolino: ใช่คุณสามารถทำได้มีbaseHrefตัวเลือก
David

ฉันจะระบุพอร์ตดีบักระยะไกลสำหรับสภาพแวดล้อม dev ได้ที่ไหน VSCodeเพื่อที่จะแก้ปัญหาด้วย ในAngular 6แน่นอน เพื่อให้ng serveคำสั่งรวมพอร์ตดีบักเกอร์ระยะไกลเมื่อเปิดChromeเบราว์เซอร์
Stephane

อัปเดตลิงค์ข้อมูล: github.com/angular/angular-cli/wiki/…
Mateo Tibaquira

1
ng services -c local ใช้เวลาในการรวบรวมแอปพลิเคชั่นเปรียบเทียบกับ "ng เสิร์ฟ"
Vignesh

46

คำตอบนี้ดูเหมือนจะดี
อย่างไรก็ตามมันนำฉันไปสู่ข้อผิดพลาดเนื่องจากมี
Configuration 'xyz' could not be found in project ...
ข้อผิดพลาดในการสร้าง
ไม่เพียงต้องการการกำหนดค่าการสร้างที่ปรับปรุงแล้ว แต่ยังให้บริการ สิ่งที่ต้องการอีกด้วย

ดังนั้นเพียงเพื่อไม่ให้สับสน:

  1. --env ไม่รองรับ angular 6
  2. --envถูกเปลี่ยนเป็น--configuration|| -c(และตอนนี้มีพลังมากขึ้น)
  3. เพื่อจัดการ envs ต่าง ๆ นอกเหนือจากการเพิ่มไฟล์สภาพแวดล้อมใหม่ตอนนี้จำเป็นต้องทำการเปลี่ยนแปลงบางอย่างในangular.jsonไฟล์:
    • เพิ่มการกำหนดค่าใหม่ในคุณสมบัติการสร้าง { ... "build": "configurations": ...
    • การกำหนดค่าการสร้างใหม่อาจมีเพียงfileReplacementsบางส่วน (แต่มีตัวเลือกเพิ่มเติม)
    • เพิ่มการกำหนดค่าใหม่ในการให้บริการ { ... "serve": "configurations": ...สถานที่ให้บริการ
    • การกำหนดค่าบริการใหม่จะต้องประกอบด้วยbrowserTarget="your-project-name:build:staging"

8

คุณสามารถลอง: ng serve --configuration=dev/prod

เพื่อสร้างการใช้งาน: ng build --prod --configuration=dev

หวังว่าคุณจะใช้สภาพแวดล้อมที่แตกต่าง


ng services --configuration = คำสั่ง dev / prod ใช้เวลาเปรียบเทียบกับ ng service ทำไม?
Vignesh

ng เสิร์ฟ - การกำหนดค่า = prod ใช้เวลามากขึ้นแล้ว ng ให้บริการ - การกำหนดค่า = prod เนื่องจากการย่อขนาดไฟล์และเนื่องจากรหัสพร้อมการผลิต
amku91

ตกลงถ้าฉันใช้คำสั่ง "ng บริการ - การตั้งค่า = dev" หมายความว่ามันยังใช้เวลามากขึ้น
Vignesh

ไม่ไม่ควรใช้เวลามากกว่านี้ สภาพแวดล้อมของ prod มีขั้นตอนพิเศษในการย่อ, uglify และเพิ่มประสิทธิภาพโค้ดสำหรับการผลิต สภาพแวดล้อมอื่นควรใช้เวลาปกติเว้นแต่คุณจะเปิดใช้งานขั้นตอนพิเศษเหล่านี้อย่างชัดเจน
Reginaldo Camargo Ribeiro

6

สำหรับ Angular 2 - 5 อ้างอิงบทความMultiple Environment ในเชิงมุม

สำหรับการใช้งานเชิงมุม 6 ng serve --configuration=dev

หมายเหตุ: อ้างอิงบทความเดียวกันสำหรับ angular 6 เช่นกัน แต่ไม่ว่าคุณ--envจะใช้ที่--configurationใดก็ตาม ใช้งานได้ดีสำหรับเชิงมุม 6


2

คุณสามารถใช้คำสั่งng serve -c devสำหรับสภาพแวดล้อมการพัฒนา ng serve -c prodสำหรับสภาพแวดล้อมการผลิต

ในขณะที่อาคารก็ใช้เช่นเดียวกัน คุณสามารถใช้ng build -c devสำหรับการสร้าง dev


2

Angular ไม่รองรับ --env แทนคุณต้องใช้

ng serve -c dev

สำหรับสภาพแวดล้อมการพัฒนาและ

ng serve -c prod 

สำหรับการผลิต

หมายเหตุ: -cหรือ--configuration


คำถามนี้ถูกถามและตอบเมื่อปีที่แล้วและคำตอบของคุณก็ผิด-cด้วย (ด้วยเครื่องหมายขีดกลาง) หรือ--configuration(พร้อมเครื่องหมายขีดกลางสองครั้ง)
Martin Adámek

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.