草庐IT

javascript - 在 webpack 中包含第三方库

coder 2025-01-20 原文

我正在尝试使用 webpack 将插件 ( freezeframe plugin) 添加到我的应用程序中,但我无法理解如何操作。我从我的应用程序本地提供这个文件,而不是从 cdn 或 npm/bower。我已经进行了全面搜索以尝试解决这个问题,但一直无法接近。

我的 webpack 文件如下所示:

const webpack = require('webpack');
const conf = require('./gulp.conf');
const path = require('path');

const HtmlWebpackPlugin = require('html-webpack-plugin');
const autoprefixer = require('autoprefixer');

module.exports = {
  module: {
    preLoaders: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'eslint'
      }
    ],

    loaders: [
      {
        test: /.json$/,
        loaders: [
          'json'
        ]
      },
      {
        test: /\.gif$/,
        loader: 'url-loader',
        query: { mimetype: 'image/gif' }
      },
      {
        test: /\.svg$/,
        loader: 'svg-loader?pngScale=2'
      },
      {
        test: /\.(eot|woff|woff2|ttf|svg|png|jpg)$/,
        loader: 'url-loader?limit=30000&name=[name]-[hash].[ext]'
      },
      {
        test: /\.(css|scss)$/,
        loaders: [
          'style',
          'css',
          'sass',
          'postcss'
        ]
      },
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loaders: [
          'babel',
        ]
      },
      {
        test: /.vue$/,
        loaders: [
          'vue'
        ]
      }
    ]
  },
  vue: {
    postcss: [
      require('autoprefixer')({
        browsers: [
          'Android >= 2.3',
          'BlackBerry >= 7',
          'Chrome >= 9',
          'Firefox >= 4',
          'Explorer >= 9',
          'iOS >= 5',
          'Opera >= 11',
          'Safari >= 5',
          'OperaMobile >= 11',
          'OperaMini >= 6',
          'ChromeAndroid >= 9',
          'FirefoxAndroid >= 4',
          'ExplorerMobile >= 9'
        ]
      }),
    ]
  },
  plugins: [
    new webpack.optimize.OccurrenceOrderPlugin(),
    new webpack.NoErrorsPlugin(),
    new HtmlWebpackPlugin({
      template: conf.path.src('index.html')
    }),
    new webpack.ProvidePlugin({
      $: 'jquery',
      jquery: 'jquery',
      'window.jQuery': 'jquery',
      jQuery: 'jquery',
      slick: 'slick-carousel'
    })
  ],
  resolve: {
    extensions: ['', '.js', '.css', '.scss'],
    alias: {
      'jQuery': path.join(__dirname, 'node_modules', 'jquery', 'dist', 'jquery')
    }
  },
  postcss: () => [autoprefixer({
    browsers: [
      'Android >= 2.3',
      'BlackBerry >= 7',
      'Chrome >= 9',
      'Firefox >= 4',
      'Explorer >= 9',
      'iOS >= 5',
      'Opera >= 11',
      'Safari >= 5',
      'OperaMobile >= 11',
      'OperaMini >= 6',
      'ChromeAndroid >= 9',
      'FirefoxAndroid >= 4',
      'ExplorerMobile >= 9'
    ]
  })],
  debug: true,
  devtool: 'source-map',
  output: {
    path: path.join(process.cwd(), conf.paths.tmp),
    filename: 'index.js'
  },
  entry: `./${conf.path.src('index')}`
};

我以为我在我的 vue 组件中写了 require('./assets/freezeframe/freezeframe.js'); 但它随后提示未定义 jquery。我通过 npm 安装了 jquery,我已经在使用另一个使用 jquery 的插件,如下所示:

import 'slick-carousel';
  const imagesLoaded = require('imagesloaded');

  export default {
    name: 'Slider',
    props: ['images', 'component'],
    mounted () {
      var that = this;
      $(function() {
        imagesLoaded('.js-component-slider',() => {
          $(that.$el).slick({
            adaptiveHeight: true,
            infinite: false
          });
        });
      });
    }
  }

我现在不知道该怎么办。我不想在我的 index.html 的顶部/底部包含另一个 jquery 和插件文件,因为我希望它们捆绑在一起。

唯一令人痛苦的事情是这个插件不在 npm 中,而且我没有使用 bower。

更新:

我看过这个问题add-js-file但我已经尝试对插件执行此操作,但仍然收到错误消息,即当我需要('nameofffile')时它未被包含

最佳答案

所以在搜索了一整天后,我发现我必须填充插件,因为它没有使用 module.export。 shim plugin这意味着我可以这样写:您还需要安装 exports-loader

const freezeframe = require("exports?freezeframe!./assets/freezeframe/freezeframe.js");

在我的 vue 文件中。然后,当我将它添加到 index.html 中时,我就可以像以前一样使用它了

关于javascript - 在 webpack 中包含第三方库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40932843/

有关javascript - 在 webpack 中包含第三方库的更多相关文章

  1. ruby-on-rails - 在 heroku 的 .fonts 文件夹中包含自定义字体,似乎无法识别它们 - 2

    Heroku支持人员告诉我,为了在我的Web应用程序中使用自定义字体(未安装在系统中,您可以在bash控制台中使用fc-list查看已安装的字体)我必须部署一个包含所有字体的.fonts文件夹里面的字体。问题是我不知道该怎么做。我的意思是,我不知道文件名是否必须遵循heroku的任何特殊模式,或者我必须在我的代码中做一些事情来考虑这种字体,或者如果我将它包含在文件夹中它是自动的......事实是,我尝试以不同的方式更改字体的文件名,但根本没有使用该字体。为了提供更多详细信息,我们使用字体的过程是将PDF转换为图像,更具体地说,使用rghostgem。并且最终图像根本不使用自定义字体。在

  2. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  3. ruby-on-rails - Rails 3 在一个查询中包含多个表 - 2

    我正在为锦标赛开发一个Rails应用程序。我在这个查询中使用了三个模型:classPlayertruehas_and_belongs_to_many:tournamentsclassTournament:destroyclassPlayerMatch"Player",:foreign_key=>"player_one"belongs_to:player_two,:class_name=>"Player",:foreign_key=>"player_two"在tournaments_controller的显示操作中,我调用以下查询:Tournament.where(:id=>params

  4. ruby - 在 Mechanize 中使用 JavaScript 单击链接 - 2

    我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan

  5. Ruby:如何在 sprintf 输出中包含 % 符号? - 2

    我有:sprintf("%02X"%13)哪些输出:=>"OD"我希望我的输出是:=>"%0D"我试过:sprintf("\%%02X"%13)但我得到一个错误警告:格式字符串的参数过多。这同样适用于:sprintf("%%02X"%13)是否可以单独在sprintf中添加前导%? 最佳答案 文字%必须转义为%%:sprintf('%%')#=>"%"此外,您应该使用sprintf或%,而不是两者:sprintf('%%%02X',13)#=>"%0D"#^#commahere'%%%02X'%13#=>"%0D"#^#percen

  6. ruby - 如何在 ruby​​ 模块中包含单元测试? - 2

    我正在尝试将模块的单元测试包含在与模块本身相同的源文件中,遵循Perlmodulino模型。#!/usr/bin/envrubyrequire'test/unit'moduleModulinodefmodulino_functionreturn0endendclassModulinoTest现在,我可以运行执行此源文件的单元测试。但是,当我从另一个脚本需要/加载它们时,它们也会运行。如何避免这种情况?是否有更惯用的方法来使用Ruby实现此目的,除非不鼓励这种做法? 最佳答案 就我个人而言,我从未听说有人试图在Ruby中这样做。这绝对

  7. javascript - jQuery 的 jquery-1.10.2.min.map 正在触发 404(未找到) - 2

    我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文

  8. ruby-on-rails - 我将 Rails3 与 tinymce 一起使用。如何呈现用户关闭浏览器javascript然后输入xss? - 2

    我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如

  9. ruby - 使用 Selenium WebDriver 启用/禁用 javascript - 2

    出于某种原因,我必须为Firefox禁用javascript(手动,我们按照提到的步骤执行http://support.mozilla.org/en-US/kb/javascript-settings-for-interactive-web-pages#w_enabling-and-disabling-javascript)。使用Ruby的SeleniumWebDriver如何实现这一点? 最佳答案 是的,这是可能的。而是另一种方式。您首先需要查看链接Selenium::WebDriver::Firefox::Profile#[]=

  10. ruby-on-rails - 如何在 RSpec 中包含多个模块? - 2

    我不确定将几个模块包含到RSpec中的方式,所以让我描述一下我的情况。在app/helpers下,我有两个带有助手的文件,包含模块ApplicationHelper和MailersHelper。尽管这些是我在我的View和邮件中使用的View助手,但我也在我的测试中使用了它们的一些方法,因此它们必须可以在describe子句中访问。在app/spec/mailers下,我还有一个文件,包含模块Helpers。该模块包含仅在测试中使用的方法(主要是长期期望的包装方法)。此外,我还有以下代码:classHelpersincludeSingletonincludeActionView::He

随机推荐