Angular 8 - Mô-đun tải chậm: Lỗi TS1323: Nhập động chỉ được hỗ trợ khi cờ '--module' là 'commonjs' hoặc 'esNext'


107

Khi tôi cập nhật Angular từ 7 lên Angular 8, gặp lỗi mô-đun tải chậm

Tôi đã thử các tùy chọn, có trong hướng dẫn nâng cấp góc

Thực hiện các thay đổi dưới đây:

Trước

    loadChildren: '../feature/path/sample- 
                         tage.module#SameTagModule'

Sau

   loadChildren: () => import('../feature/path/sample- 
                      tags.module').then(m => m.CreateLinksModule)

lỗi TS1323: Nhập động chỉ được hỗ trợ khi cờ '--module' là 'commonjs' hoặc 'esNext'.

Câu trả lời:


205

Bạn đang sử dụng nhập động, vì vậy bạn phải thay đổi tsconfig.json của mình như thế này để nhắm mục tiêu mã của bạn đến esnextmô-đun

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "esnext", // add this line
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "importHelpers": true,
    "target": "es2015",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  }
}

Ngoài ra, hãy nhớ kiểm tra tsconfig.app.json không có mô-đun và cấu hình mục tiêu như thế này

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "outDir": "./out-tsc/app",
    "types": []
  },
  "include": [
    "src/**/*.ts"
  ],
  "exclude": [
    "src/test.ts",
    "src/**/*.spec.ts"
  ]
}

4
ng newkhông sử dụng điều này theo mặc định. Có một lý do?
Helzgate

2
Nó dường như hoạt động trong Edge, Chrome, Firefox và IE11 khi tôi bỏ ghi chú phần IE11 trong polyfills nên tôi rất vui.
Helzgate

12
Tôi đã phải xóa "module": "es2015"dòng khỏi tsconfig.app.jsontệp của mình
ranbuch

5
@ranbuch, tôi gặp sự cố tương tự nhưng không xóa dòng, tôi chỉ thay đổi nó thành "module": "esnext"tốt.
Alfa Bravo

vẫn phải đối mặt với sự kiện cùng một vấn đề sau khi tập tin cập nhật tsconfig.json
Gaurav Aggarwal

25

Chỉ cần thêm vào anwser của @ Tony, bạn cũng có thể cần thực hiện tương tự (thay đổi thành "module": "esnext") trong tsconfig.app.json. Trong trường hợp của tôi, tsconfig.json đã sử dụng esnext làm mô-đun nhưng tsconfig.app.json vẫn đang sử dụng es2015 và điều đó gây ra lỗi này.


3
Chúng ta có thể tránh thêm "module": "esnext" trong cả hai tệp, chúng ta có thể đặt nó trong tsconfig.json nhưng không phải trong tsconfig.app.json, vì điều này đã mở rộng tsconfig.json.
RajuPedda

14

Chỉ muốn thêm kinh nghiệm của tôi vào câu trả lời của @ Tony. Sau khi thay đổi tsconfig.jsonnó vẫn báo lỗi (gạch chân màu đỏ). Chỉ sau khi mở lại trình chỉnh sửa (tôi đã sử dụng VSCode), tôi mới thấy gạch chân màu đỏ biến mất.


Tôi không có tệp tsconfig.app.json. Tôi có nên tạo một cái?
Đánh dấu

Có, vui lòng tham khảo điều này. stackoverflow.com/questions/36916989/…
Tai JinYuan

Rất hữu ích. Cảm ơn :)
Praveen Kumar Palai

1
Trong IDEA Intelij, tôi đã gặp vấn đề tương tự. Bạn cần mở lại dự án.
NieMaszNic

12

Tôi nghĩ cách thích hợp để làm điều này là điều chỉnh tsconfig.app.jsonhơn là điều chỉnh tsconfig.json.

tsconfig.app.json

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "baseUrl": "./",
    "module": "esnext",
    "types": []
  },
  "exclude": [
    "test.ts",
    "**/*.spec.ts"
  ]
}

tsconfig.app.jsonlà tệp cấu hình Typecript cụ thể cho ứng dụng nằm bên dưới gốc của không gian làm việc Angular . Các tsconfig.app.jsontồn tại do đó nếu bạn đang xây dựng một không gian làm việc kiễu góc có nhiều ứng dụng trong nó, bạn có thể điều chỉnh cấu hình nguyên cảo riêng cho từng ứng dụng mà không cần phải viết thuộc tính cấu hình dự phòng mà chồng chéo giữa các ứng dụng (do đó extendstài sản).

Về mặt kỹ thuật, bạn không cần tsconfig.app.jsonchút nào. Nếu bạn xóa nó, bạn sẽ phải đặt "module": "esnext"trong tsconfig.json. Nếu bạn giữ nó ở đó, nó sẽ được ưu tiên hơn tsconfig.json, vì vậy bạn chỉ cần thêm "module":"esnext"dòng vào tsconfig.app.json.


Có, tôi đã phải thêm mô-đun: 'esnext' trong cả tsconfig.json và tsconfig.app.json
RDV

0

tôi giải quyết lỗi này bằng cách thực hiện các bước sau bước 1: "module": "es2015" thành "module": "AMD" trong tsconfig.json

Bước 2: Tạo một tệp mới tsconfig.app.json trong thư mục gốc của ứng dụng, sao chép mã của Tony Ngô và dán vào, sau đó vấn đề này sẽ được giải quyết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.