Node Error: Cannot use import statement outside a module even though I'm not
Node Error: Cannot use import statement outside a module even though I'm not
我正在使用 Pm2,这是错误:
SyntaxError: Cannot use import statement outside a module
Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
问题是,package.json
已经设置为 "type": "module"
。
此外,在我重新启动服务器之前一切都正常工作。
这是实际的 .js
文件:
const http = require('http');
const url = require('url');
const querystring = require('querystring');
const hostname = 'localhost';
const port = 8080;
import captureWebsite from 'capture-website';
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World!\n');
....
});
如果 require
调用没有抛出错误,则在 post 中创建 http 服务器的“实际 .js
文件”将被视为 CommonJS。但是 CommonJS 代码不能使用 import
语句,需要使用 import expressions 代替(参见 node and MDN 文档)。
如果您使用动态导入(异步的),您还需要在 await
语句之后(在 async
函数内)或在提供的成功处理程序中使用导入的模块then
方法:
// ....
import('capture_website')
.then( capture_website => {
// code requiring existence of `capture_website`
})
.catch( err=> console.error("Import of capture_website failed", err));
但是您可以在 ES6 文件中使用 import 语句导入 CommonJS 模块 (Node doc)。
因此,更好的解决方案可能是重命名主 js
文件 posted 以赋予它 .mjs
扩展名,并将文件中的所有 require 语句替换为 import
语句:
import http from 'http';
import url from 'url';
import querystring from 'querystring';
这消除了 Cannot use import statement outside a module
语法错误。导入的 CommonJS 模块应该仍然能够使用 require
函数来请求模块。
我正在使用 Pm2,这是错误:
SyntaxError: Cannot use import statement outside a module
Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
问题是,package.json
已经设置为 "type": "module"
。
此外,在我重新启动服务器之前一切都正常工作。
这是实际的 .js
文件:
const http = require('http');
const url = require('url');
const querystring = require('querystring');
const hostname = 'localhost';
const port = 8080;
import captureWebsite from 'capture-website';
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World!\n');
....
});
如果 require
调用没有抛出错误,则在 post 中创建 http 服务器的“实际 .js
文件”将被视为 CommonJS。但是 CommonJS 代码不能使用 import
语句,需要使用 import expressions 代替(参见 node and MDN 文档)。
如果您使用动态导入(异步的),您还需要在 await
语句之后(在 async
函数内)或在提供的成功处理程序中使用导入的模块then
方法:
// ....
import('capture_website')
.then( capture_website => {
// code requiring existence of `capture_website`
})
.catch( err=> console.error("Import of capture_website failed", err));
但是您可以在 ES6 文件中使用 import 语句导入 CommonJS 模块 (Node doc)。
因此,更好的解决方案可能是重命名主 js
文件 posted 以赋予它 .mjs
扩展名,并将文件中的所有 require 语句替换为 import
语句:
import http from 'http';
import url from 'url';
import querystring from 'querystring';
这消除了 Cannot use import statement outside a module
语法错误。导入的 CommonJS 模块应该仍然能够使用 require
函数来请求模块。