如何从 nuxt.js 页头的 node_modules 文件夹中引用 js 文件

Posted

技术标签:

【中文标题】如何从 nuxt.js 页头的 node_modules 文件夹中引用 js 文件【英文标题】:How can I reference js file from node_modules folder in page head in nuxt.js 【发布时间】:2019-09-17 03:04:19 【问题描述】:

我已将包 onesignal-emoji-picker 添加到我的 nuxt.js vue 项目中,我想在我的页面中引用 css 和 js 文件而不将它们复制到静态文件夹。 nuxt.config.js 中轻松包含 css:

css: ['~/node_modules/onesignal-emoji-picker/lib/css/emoji.css']

但我无法引用 js 文件,head.script 部分似乎仅适用于外部资源:

script: [
  
    src: 'https://code.jquery.com/jquery-3.3.1.slim.min.js',
    type: 'text/javascript'
  ,
  
    src: '~/node_modules/onesignal-emoji-picker/lib/js/config.js',
    type: 'text/javascript'
  ,
  
    src: '~/node_modules/onesignal-emoji-picker/lib/js/util.js',
    type: 'text/javascript'
  ,
  
    src: '~/node_modules/onesignal-emoji-picker/lib/js/jquery.emojiarea.js',
    type: 'text/javascript'
  ,
  
    src: '~/node_modules/onesignal-emoji-picker/lib/js/emoji-picker.js',
    type: 'text/javascript'
  
]

在我看来,我应该以某种方式告诉 webpack 在构建时包含这些文件并适当地引用它们?我怎么能做到?谢谢!

【问题讨论】:

嘿@Andrey 有什么答案吗?我也想知道... @SabaAhang 不(( 【参考方案1】:

nuxt.config.js 中,只需使用plugins 键即可包含任何内部脚本:

plugins: [
     src: "~/node_modules/onesignal-emoji-picker/lib/js/config.js", mode: "client" ,
     src: "~/node_modules/onesignal-emoji-picker/lib/js/util.js", mode: "client" ,
     src: "~/node_modules/onesignal-emoji-picker/lib/js/jquery.emojiarea.js", mode: "client" ,
     src: "~/node_modules/onesignal-emoji-picker/lib/js/emoji-picker.js", mode: "client" 
]

注意 mode: "client" 选项,这意味着文件将仅在客户端上运行,如果库与服务器端渲染不兼容,则可以防止服务器上出现问题。在其他情况下,您可能需要删除该标志。

【讨论】:

【参考方案2】:

编辑文件./server/index.js并在app.use(nuxt.render)这一行之前添加快速静态路由。

最终的start()函数应该是这样的

async function start () 
  ...

  app.use("/node_modules", express.static(path.join(__dirname, '/../node_modules')))
  // Give nuxt middleware to express
  app.use(nuxt.render)

  ....

修改后你可以在 vue 页面头部添加 node_modules 库。

export default 
    head:
        script: [
             src: "/node_modules/three/build/three.min.js", type: 'text/javascript', charset: 'utf-8'
        ]
    ,

【讨论】:

【参考方案3】:

尝试使用节点路径库。我认为它是 nuxt 依赖项之一,所以它应该已经安装,如果不只是安装它。

https://www.npmjs.com/package/path

然后在nuxt.config.js顶部导入

const path = require('path')

....

css: [path.resolve(__dirname, 'node_modules/onesignal-emoji-picker/lib/css/emoji.css')]

脚本也一样

【讨论】:

以上是关于如何从 nuxt.js 页头的 node_modules 文件夹中引用 js 文件的主要内容,如果未能解决你的问题,请参考以下文章

vue + nuxt.js - 如何读取从外部请求接收到的 POST 请求参数

如何从 auth-module、Nuxt.js 获取 access_token

如何从 nuxt.js 的 assets 文件夹中导入 css 文件

Vue.js 和 Nuxt.js

Nuxt.js:如何重定向内部方法

Nuxt.js - 如何将图像上传到 cloudinary?