【问题标题】:Use jspm to load script that depends on global jQuery使用jspm加载依赖全局jQuery的脚本
【发布时间】:2015-07-10 20:46:09
【问题描述】:

是的,我读过How do I shim a non CommonJS, non AMD package which depends on global jQuery & lodash?

我正在尝试通过 jspm 加载 X.js,它不是一个“包”,而是一个旧的 js 文件,我无法控制它需要一个全局 jQuery 对象,并且需要像在脚本标签中一样运行.

我正在使用 System.import('app/X');加载它。

我尝试了各种 shim / globals 技巧来使其加载,但我无法弄清楚。

如何编写 config.js 以便能够导入该 X 文件以便它看到一个全局 jQuery 对象?我是否必须将 X 设为“包”并安装它才能更好地填充它?

谢谢。

【问题讨论】:

    标签: javascript jquery jspm systemjs es6-module-loader


    【解决方案1】:

    如果你是通过 jspm 安装 jquery,你只需要像这样设置 meta 'deps' 属性:

    System.config({
      meta: {
        'app/X': {
           deps: ['jquery']
        }
      }
    });
    
    System.import('app/X');
    

    确保正确获取 X 路径并检查 jspm 如何设置 System.config 'paths' 和 'map',默认情况下会自动添加尾随 .js(使用路径 *.js 通配符),因此您不能添加它.

    也许也可以尝试查看文档中的这些链接https://github.com/systemjs/systemjs/blob/master/docs/module-formats.md#globalshttps://github.com/systemjs/systemjs/blob/master/docs/config-api.md#meta

    【讨论】:

    • 有什么理由为什么在自己的文件中执行import $ from 'jquery';import 'app/X'; 似乎有效而执行System.import('app/X'); 无效,即使以这种方式配置?抱歉,我还是 jspm 的新手,即使有文档,至少可以说非常令人困惑。
    【解决方案2】:

    如果提供如下元“deps”属性(如 Mathias Rasmussen 所建议的那样)不能解决问题,

    System.config({
      meta: {
        'app/X': {
           deps: ['jquery']
        }
      }
    });
    

    那么您可能必须提供如下所示的“全局”元属性:

    System.config({
      meta: {
        'app/X': {
           globals: {
               'jquery': 'jquery' 
           }
        }
      }
    });
    

    为了使上述工作正常,您需要通过 jspm 安装 jquery。执行上述操作还应该允许您通过执行 System.import('app/X');import 'app/X'; 来导入插件,而无需导入 jquery。单独导入插件也应该将 jquery 作为依赖项引入。

    【讨论】:

      猜你喜欢
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 2014-10-06
      • 1970-01-01
      • 2020-07-24
      • 1970-01-01
      相关资源
      最近更新 更多