执行serverless deploy报错:'import'和'export'仅适用于sourceType: module
解决Serverless Deploy时的
'import' and 'export' may appear only with 'sourceType: module'错误 以下是针对性的实用解决步骤,按优先级尝试:
1. 给项目明确ES模块类型
在项目根目录的package.json中添加配置,告知Node.js当前为ES模块项目:
{ "type": "module" }
2. 配置Serverless代码构建工具
若项目使用了serverless-esbuild或serverless-webpack这类代码优化/构建插件,需明确指定模块格式:
针对serverless-esbuild
在serverless.yml的custom字段中补充ES模块配置:
custom: esbuild: format: esm target: node16 # 匹配你的Node版本(当前为16.10.0)
针对serverless-webpack
修改webpack.config.js,通过Babel转译ES模块为CommonJS:
export default { mode: 'production', entry: './handler.js', target: 'node16', module: { rules: [ { test: /\.js$/, exclude: /node_modules/, use: { loader: 'babel-loader', options: { presets: [['@babel/preset-env', { targets: { node: '16' } }]] } } } ] }, output: { filename: 'handler.js', libraryTarget: 'commonjs2' } };
3. 调整Browserify配置(若依赖它)
如果必须用Browserify处理代码,需指定sourceType: module或转译ES模块:
命令行方式
执行Browserify时添加参数:
browserify --source-type=module src/handler.js -o dist/handler.js
配置文件方式(如browserify.config.js)
export default { sourceType: 'module', transform: [['babelify', { presets: ['@babel/preset-env'] }]] };
4. 修正ESLint配置
确保.eslintrc.js正确识别ES模块:
export default { env: { node: true, es2021: true }, parserOptions: { sourceType: 'module', ecmaVersion: 'latest' }, rules: { // 你的其他规则 } };
5. 升级Serverless框架
旧版本框架对ES模块支持可能存在缺陷,升级到最新稳定版:
npm install -g serverless@latest
内容的提问来源于stack exchange,提问作者julianscruz
相关产品推荐
相关产品推荐

