使用jspm加载依赖于全局jQuery的脚本

时间:2015-07-10 20:46:09

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

是的,我读过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设为'包'并安装它才能更好地填充它?

感谢。

2 个答案:

答案 0 :(得分:3)

If you installed jquery through jspm, all you need is to set the meta 'deps' property like this:

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

System.import('app/X');

Be sure to get the X path correctly and check how jspm sets up System.config 'paths' and 'map', by default trailing .js is added automatically (with paths *.js wildcard) so you must not add it.

Maybe try to look at these links from the documentation as well https://github.com/systemjs/systemjs/blob/master/docs/module-formats.md#globals https://github.com/systemjs/systemjs/blob/master/docs/config-api.md#meta

答案 1 :(得分:1)

如果提供meta' 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作为依赖项。