You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js 如何导入.sql文件并将其内容用于SQL查询执行

Node.js导入.sql文件调用的实现方案

你提的需求完全可以落地,以下是不同场景下的可执行方案:

1. 原生Node.js(无构建工具)场景

直接用Node内置的fs模块读取SQL文件即可,可封装为通用工具函数使用:

CommonJS 版本

const fs = require('fs/promises');
const path = require('path');

// 传入SQL文件名,返回文件内容字符串
async function loadSql(fileName) {
  // 这里的./sql是你存放所有SQL文件的目录,可根据项目结构调整
  const filePath = path.resolve(__dirname, './sql', fileName);
  return await fs.readFile(filePath, 'utf-8');
}

// 业务代码中调用
const getUsersSql = await loadSql('get_users.sql');
orm.execute(getUsersSql);

ESM 版本

import { readFile } from 'fs/promises';
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

async function loadSql(fileName) {
  const filePath = join(__dirname, 'sql', fileName);
  return readFile(filePath, 'utf-8');
}

2. 带构建工具(Webpack/Vite/Rollup)场景

可以通过配置loader/plugin实现你示例中的直接import写法:

Webpack 配置

首先安装raw-loader依赖,然后在webpack配置中新增规则:

module.exports = {
  module: {
    rules: [
      {
        test: /\.sql$/i,
        use: 'raw-loader',
      },
    ],
  },
};

配置完成后就可以直接用如下写法导入:

import sql from './my_query.sql';
orm.execute(sql);

Vite 配置

Vite内置了静态资源raw导入能力,无需额外安装依赖,导入时加?raw后缀即可:

import sql from './my_query.sql?raw';
orm.execute(sql);

3. TypeScript 类型适配

如果使用TypeScript开发,需要新增类型声明让TS识别.sql模块,在项目的全局类型声明文件(如custom.d.ts、env.d.ts)中加入如下代码:

declare module '*.sql' {
  const content: string;
  export default content;
}

如果是Vite的?raw导入方式,Vite已经内置了对应类型,无需额外声明。

注意事项

  • 所有SQL文件统一使用UTF-8编码,避免读取时出现乱码
  • 涉及动态参数的SQL不要手动拼接字符串,使用ORM自带的参数绑定能力,避免SQL注入风险

内容的提问来源于stack exchange,提问作者lpetrucci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:42:03