javascript - 如何将 npm 包的静态资源发送到 nuxt 应用程序?

标签 javascript vue.js nuxt.js npm-package

我正在尝试将 Assets 从 npm 包发送到 nuxt 应用程序。有人成功做到过吗?

我有一个 vue 组件作为 npm 包,其结构:

-src/
 -assets/
  -noun-filter.svg

此矢量图像加载到此 npm 包中的 vue 组件模板中,如下所示:

<img class="filter-icon" :src="require('../assets/noun-filter.svg')"/>

当单独测试这个包时,上面的内容可以很好地使用。

但是,当我像这样在 nuxt 应用程序中导入 npm 包时:

<script>
export default {
  name: "NuxtMainPage",
  components: {
    NpmImportedComponent: process.client
      ? () => import("@myname/mynpmpackage").then(m => m.Content)
      : null
  },
//...
}
</script>

当我运行该应用程序时,我得到 svg 的 404。

Nuxt 在 http://localhost:3000/_nuxt/img/noun-filter.b16c5666.svg 中查找不存在的文件。

我在这里缺少什么吗?为什么nuxt会改变 Assets 的路径?为什么它不像我们期望的那样只查看节点模块?

如何通过 npm 包将静态资源发送到 nuxt?

我尝试过的

  • 尝试在我的应用程序中使用 url-loader。网址仍然在 nuxt 中被重定向
  • 在 nuxt 应用中使用 import @myname/mypackage/src/assets/noun-filter.svg 导入项目
  • 将 npm 包中的相对 URL 从 ../assets 切换为 @assets
  • 将 asset 文件夹移动到 npm 包的根目录,并将其添加到 package.json 中的包含文件中

以上所有内容与 nuxt 在以下位置查找图像的结果相同: http://localhost:3000/_nuxt/img/noun-filter.b16c5666.svg

最佳答案

我认为这里没有简单的解决方案。

第一个解决方案,使用 url-loader 将 Assets 文件内联为 base-64 数据 url。请参阅Asset URL Handling .

vue.config.js

...
  chainWebpack: config => {
    config.module
      .rule('images')
        .use('url-loader')
          .loader('url-loader')
          .tap(options => Object.assign(options, { limit: 10240 })) // default is 4096
  }
...

From Relative Path Imports

第二种解决方案,将资源文件复制到 static 目录并使用绝对 URL。

Related post .

关于javascript - 如何将 npm 包的静态资源发送到 nuxt 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64149495/

相关文章:

javascript - 使用 Jest 测试 NUXT.js 和 Vue.js 应用程序。获取 '[vuex] module namespace not found in mapState()' 和 '[vuex] unknown action type'

javascript - 使用nuxt,如何将路由名称放在页面标题中?

javascript - 异步数据加载后提交 HTML 表单的正确方法是什么?

javascript - 我无法在自定义的 tumblr 页面上使用过滤器

javascript - 用卡片实现 Vue 可拖动?

javascript - 在 Vue.JS 中观察动态嵌套数据?

vue.js - 将 parent Prop 传递给 Vue,js 中的插槽

node.js - 错误 : Cannot find module Please verify that the package. json 在 npm run dev 上有一个有效的 "main"条目 nuxtjs 错误

javascript - “加载”未定义

javascript - 代码 "length === +length"在 JavaScript 中是什么意思?