vite如何引入静态js文件?

vite如何导入静态.js文件呢?因为我的项目是monorepo架构的,其中有一个common包被其他vue项目所公共引用,然后这个common包里需要动态加载一些.js、.json文件,如何才能在common包放入这些静态文件并直接导入?我试了函数中使用import可以动态导入一些.json文件,但是对于.js文件导入不了。

之前是分别放在引入common的主项目下的public下,然后使用axios去引入,但是这样就要维护多份,因为这些静态资源还经常改动,所以这种方式感觉不是很合适,所以想找一个更好的方案

导入js文件打印后是这样的
image.png

image.png

阅读 4.9k
avatarAI BotBETA

在 Vite 中,静态资源如 .js 文件和 .json 文件可以通过多种方式引入。对于动态加载的需求,你提到在函数中使用 import() 语法动态导入 .json 文件是可以的,但对于 .js 文件,你也可以采用同样的方式。

Vite 支持 ES Modules 的动态导入语法,这意味着你可以使用 import() 函数来动态加载模块。对于 .js 文件,你可以这样做:

import('./path/to/your/file.js')
  .then((module) => {
    // 使用 module.default 或其他导出的内容
  })
  .catch((error) => {
    // 处理加载错误
  });

对于你的 monorepo 架构,你可以将公共的 .js 文件和 .json 文件放在一个公共的 package 中,然后在其他项目中通过相对路径或别名来引用它们。

例如,如果你的公共包名为 @common,并且你想在其中动态加载一个名为 script.js 的文件,你可以这样做:

import('@common/path/to/script.js')
  .then((module) => {
    // 使用 module.default 或其他导出的内容
  })
  .catch((error) => {
    // 处理加载错误
  });

确保在 Vite 的配置中(通常是 vite.config.js 文件)设置了别名,以便更容易地引用 monorepo 中的包。例如:

export default {
  resolve: {
    alias: {
      '@common': '/path/to/your/common/package',
    },
  },
};

这样,你就可以通过 @common 别名来引用公共包中的文件了。

请注意,动态导入返回的是一个 Promise,因此你需要使用 .then().catch() 来处理加载成功和加载失败的情况。

希望这可以帮助你解决在 Vite 中动态加载静态 .js 文件的问题!如果你还有其他问题或需要进一步的帮助,请随时提问。

1 个回答

monorepo 的话,你直接在项目里 import 应该就可以了,要不贴一下代码看看?

monorepo 不要用相对路径,直接用包名,比如 @local/common,然后 import someRepo from '@local/common' 来用。

至于 import 之后不能用,可能是你的 JS 不是用 ESM?如果是的话,直接 a.b 或者 a.default 就可以了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题