TypeError: element.summernote 不是函数

Posted

技术标签:

【中文标题】TypeError: element.summernote 不是函数【英文标题】:TypeError: element.summernote is not a function 【发布时间】:2017-06-10 16:58:58 【问题描述】:

我正在开发基于 Angular、Webpack 等的项目。当我想使用 angular-summernote 时遇到了一个非常有趣的问题

它不起作用,并给我一个错误“TypeError:element.summernote 不是函数”。如果将库添加为脚本标签,它可以正常工作,没有任何构建工具,但使用 Webpack 则不会。

那么,让我们看看文件和配置

webpack.config.js

let webpack = require('webpack');
let path = require('path');

module.exports = 

    entry: 
        bundle: [
            './app/app.js'
        ]
    ,
    output: 
        path: path.join(__dirname, './public'),
        filename: '[name].js',
    ,
    resolve: 
        root: __dirname,
        extensions: ['', '.js'],
        modulesDirectories: [
            'node_modules',
            'app'
        ],
    ,
    externals: 

    ,
    plugins: [
        new webpack.ProvidePlugin(
            $: 'jquery',
            jQuery: 'jquery'
        )
    ],
    module: 
        loaders: [
            
                loader: 'babel-loader',
                query: 
                    presets: ['es2015']
                ,
                test: /\.js$/,
                exclude: /(node_modules|bower_components)/
            
        ]
    

;

app/app.js

// Load libs
import angular from 'angular';
import ngRoute from 'angular-route';
import summernote from 'summernote';
import ngSummernote from 'angular-summernote/dist/angular-summernote.js';

// App
angular.module('app', [ngRoute, 'summernote'])

.config(function($routeProvider) 

    // Router
    $routeProvider

        .when('/', 
            template: '<summernote></summernote>'
        );
);

我找到了github issue,但它仍然处于打开状态。

我做了一些调试,检查了“summernote”指令的“link”方法,并将“element”记录到控制台,它的proto对象不包含任何jquery方法,包括“summernote”方法。 为什么?以及如何使其发挥作用?

【问题讨论】:

【参考方案1】:

似乎 jquery 是按需使用的,而不是在其他脚本之前加载,所以它没有暴露全局变量 jQuery,也没有为元素附加适当的方法。

下面的配置解决了这个问题

webpack.config.js

let webpack = require('webpack');
let path = require('path');

module.exports = 

    entry: 
        bundle: [
            // We tell webpack to add jquery as script tag before app script
            // It will expose global variable jQuery and init jquery methods
            'script!jquery/dist/jquery.min.js',

            './app/app.js'
        ]
    ,
    output: 
        path: path.join(__dirname, './public'),
        filename: '[name].js',
    ,
    resolve: 
        root: __dirname,
        extensions: ['', '.js'],
        modulesDirectories: [
            'node_modules',
            'app'
        ],
    ,
    externals: 
        // This mean that require('jquery') will refer to global var jQuery
        'jquery': 'jQuery' 
    ,
    plugins: [
        // ProvidePlugin helps to recognize $ and jQuery words in code
        // And replace it with require('jquery')
        new webpack.ProvidePlugin(
            $: 'jquery',
            jQuery: 'jquery'
        )
    ],
    module: 
        loaders: [
            
                loader: 'babel-loader',
                query: 
                    presets: ['es2015']
                ,
                test: /\.js$/,
                exclude: /(node_modules|bower_components)/
            
        ]
    

;

希望阐明 webpack 的工作原理会有所帮助。如果我遗漏了什么,请分享您的想法和想法。

【讨论】:

谢谢。通过添加名为“webpack.config.js”的新文件并将上面的代码粘贴到 /src 文件夹中为我工作。 我遇到了同样的问题,但无法解决。任何人都可以请帮助我吗? ***.com/questions/63642201/…

以上是关于TypeError: element.summernote 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

反应本机获取多标记[未处理的承诺拒绝:TypeError:TypeError:未定义不是对象(评估'this.state.markers.map

Django TypeError - TypeError: issubclass() arg 1 必须是一个类

pyspark:TypeError:'float'对象不可迭代

Python 3.8 TypeError: can't concat str to bytes - TypeError: a bytes-like object is required, not 's

TypeError: key 必须是一个字符串,一个缓冲区或一个对象在 typeError 与 GCP 文件存在

TypeError: jQueryxxxxxx 不是函数