在做自动化部署的时候,引入包管理,运行脚本的时候报错:
const path = require('path')
const fs = require('fs')
const Client = require('ssh2-sftp-client')
报错信息如下:
PS D:\CODING\Projects\vue-admin-template> node deploy/index.mjs
file:///D:/CODING/Projects/vue-admin-template/deploy/index.mjs:1
const path = require('path')
^
ReferenceError: require is not defined in ES module scope, you can use import instead
at file:///D:/CODING/Projects/vue-admin-template/deploy/index.mjs:1:14
at ModuleJob.run (internal/modules/esm/module_job.js:183:25)
at async Loader.import (internal/modules/esm/loader.js:178:24)
at async Object.loadESM (internal/process/esm_loader.js:68:5)
at async handleMainPromise (internal/modules/run_main.js:59:12)
根据提示首先将require
改成import
,运行报错:
PS D:\CODING\Projects\vue-admin-template> node deploy/index.js
(node:16164) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
D:\CODING\Projects\vue-admin-template\deploy\index.js:1
import { join } from 'path'
^^^^^^
SyntaxError: Cannot use import statement outside a module
at wrapSafe (internal/modules/cjs/loader.js:1001:16)
at Module._compile (internal/modules/cjs/loader.js:1049:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
at Module.load (internal/modules/cjs/loader.js:950:32)
at Function.Module._load (internal/modules/cjs/loader.js:790:12)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:75:12)
at internal/main/run_main_module.js:17:47
根据报错提示,尝试两种解决方案:
1.在package.json
中使用"type": "module"
:不可行,这将覆盖整个项目,导致项目启动不了。
2.将文件更改为index.mjs
,表示引入module模块。最终解决问题。