【问题标题】:Including tokenfield package to laravel with npm使用 npm 将 tokenfield 包包含到 laravel
【发布时间】:2018-04-24 03:32:13
【问题描述】:

我正在尝试将带有 npm 的 tokenfield 包包含到 laravel。

首先我在 package.json 依赖项中添加了以下行:

"tokenfield": "^0.8.2",

这导致节点模型下的 tokenfield 文件夹。 然后我在 webpack.mix.js 中添加了以下几行:

.copy('node_modules/tokenfield/dist/tokenfield.js', 'public/js')
.copy('node_modules/tokenfield/dist/tokenfield.css', 'public/css')

这导致我的公共文件夹中有标记字段 javascript 和 css。现在我只是像这样将那些包含在我的视图中:

<link href="{{ asset('css/app.css') }}" rel="stylesheet">
<script src="{{ asset('js/tokenfield.js') }}"></script>

但这确实行不通。我收到以下错误:

Uncaught ReferenceError: module is not defined at tokenfield.js:1

当我查看 tokenfield.js 时,它看起来不像一个普通的 javascript 文件,它的开头是:

module.exports =

那我在这里失踪了怎么办?

【问题讨论】:

    标签: javascript php node.js laravel npm


    【解决方案1】:

    大多数时候您需要转译 NPM 包。这样做:

    在您的主 js(例如 app.js)中

    window.Tokenfield =  require("tokenfield"); 
    

    需要使用window 以使其全局可访问,因为转译的依赖项都在iife 内执行,因此默认情况下不属于全局范围(并非所有模块都需要这样做)。

    在您的主 SCSS(例如 app.scss)中

    @import "node_modules/tokenfield/lib/scss/tokenfield"
    

    然后它应该与默认的混合样板一起使用。

    【讨论】:

    • 默认混合样板是什么意思?我不太明白我必须在哪里复制 tokenfield dist 才能使这些引用起作用?目前我收到以下错误:找不到或无法读取要导入的文件:tokenfield.
    • Laravel 附带 this JSthis scss 文件,默认使用 webpack.mix.js 文件(5.4 之前的 Laravel 版本的想法是相同的,但使用 gulp 代替 webpack.mix。这里的想法是基本上需要这个库。这样 webpack 就会知道将它包含在你的编译资产中。
    • 所以我通过使用 css 工作:@import "node_modules/tokenfield/lib/scss/tokenfield";但是javascript仍然存在问题。如果我只是添加 require("tokenfield");到我的 app.js 然后我可以看到我编译的 app.js 添加了一些与令牌字段相关的函数,但是当我尝试使用令牌字段时,我收到以下错误:“未捕获的 ReferenceError:令牌字段未定义”。如果我只包含这个脚本而不是“github.com/KaneCohen/tokenfield/blob/master/dist/…”,一切正常。任何想法通过 app.js 引入时可能会出现什么问题?
    • @user1985273 通过require 包含然后打包的脚本以iife 的形式出现,因此它们不在窗口范围内,您可以使用window.Tokenfield = require("tokenfield") 来制作Tokenfield 库全球可用。
    猜你喜欢
    • 2020-07-15
    • 2014-08-07
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 2021-09-07
    • 1970-01-01
    • 2020-12-16
    相关资源
    最近更新 更多