Asked Apr 5th, 3:13 AM 105 0 5
  • 105 0 5
+2

[Nodejs, Typescript] Lỗi: Cannot use import statement outside a module

Share
  • 105 0 5

Mình vừa thêm 1 vài file .ts vào dự án nodejs, thì không npm start được (build tsc thì ok không lỗi gì)

Lỗi: Cannot use import statement outside a module

package.json node: 14.15.0

tsconfig.json

{
    "compilerOptions": {
        "target": "ES2016",
        "module": "commonjs"
    }
}

Bạn nào biết lỗi chỉ giúp mình với, thank you all.

Apr 5th, 3:15 AM

Bác cho ae xin cái script của alias "start" trong file package.json với được hơm?

0
| Reply
Share
Apr 5th, 3:22 AM

"scripts": { "start": "node bin/www" }

cái này à b

0
| Reply
Share

5 ANSWERS


Answered Apr 5th, 11:45 AM
+2

Update

Mình đã fix được lỗi, là do có 1 file .js có sử dụng cú pháp import ... from (cái này chỉ dùng trong file .ts), mà đúng ra là phải dùng require().

Thank you all

Share
Trần Xuân Thắng @tranxuanthang
Apr 6th, 6:42 AM

Nodejs từ lâu đã sử dụng được import kiểu ES module rồi mà nhỉ. Bạn thử xem "type": "module" đã có trong package.json chưa?

https://nodejs.org/api/esm.html#esm_modules_ecmascript_modules

+1
| Reply
Share
Apr 7th, 2:16 AM

@tranxuanthang nếu vậy thì cần đổi đuôi file .js sang .mjs anh à

0
| Reply
Share
Answered Apr 5th, 3:23 AM
0

Ở file package.json bạn thêm "type": "module" xem sao ạ

Share
Apr 5th, 3:29 AM

Thêm cái này vào thì nó lại báo file bin/www không có đuôi file (trước giờ ko có đuôi file .js vẫn chạy ok đấy). T sửa thành www.js thì lại báo lỗi khác liên quan đến import. sao ra nhiều lỗi vậy nhỉ, từ khi thêm mấy file .ts này vào

0
| Reply
Share
Thái Viết Phúc @qtwyefqywewqvehqw
Apr 9th, 3:02 AM
Answered Apr 5th, 3:27 AM
0
const path = require('path');
const isProduction = false;
const mode = isProduction ? 'production' : 'development';
const devtool = isProduction ? false : 'inline-source-map';
module.exports = {
  entry: './server/server.ts',
  target: 'node',
  mode,
  devtool,

  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: [
          {
            loader: 'babel-loader',
          }
        ]
      },
      {
        test: /\.ts$/,
        exclude: /node_modules/,
        use: [
          {
            loader: 'babel-loader',
          },
          {
            loader: 'ts-loader',
          },
        ]
      }
    ]
  },
  resolve: {
    extensions: ['.js', '.ts', '.json' ]
  },
  output: {
    filename: 'server.js',
    path: path.resolve(__dirname, 'build'),
    library: 'server',    // very important line
    libraryTarget: 'umd',    // very important line
    umdNamedDefine: true     // very important line
  },
  node: {
    __dirname: false,
    __filename: false,
  },
};
Share
Apr 5th, 3:35 AM

check chatwork đi a, e nhờ

0
| Reply
Share
Answered Apr 5th, 8:47 AM
0

Có thể lib bạn đang dùng đã hỗ trợ pure ESM nên mới bị lỗi như thế.

Share
Answered Apr 5th, 9:36 AM
0
{
        "include": [
		"src/**/*.ts"
	],
	"lib": [
		"esnext",
		"dom"
	]
}

Bạn thử thêm cái này vào tsconfig.json

Share