我是Meteor的新手,正在尝试将javascript文件导入:skel.min.js,skel-layout.min.js和skel-viewport.min.js到项目中。

这3个文件位于client / js路径(client/js/skel.min.jsclient/js/skel-layout.min.jsclient/js/skel-viewport.min.js)上。

我在“ client / baseLayout / baseLayout.js”中具有基本布局,并且交付如下:

import angular from 'angular';
import angularMeteor from 'angular-meteor';
import uiRouter from 'angular-ui-router';
import * as skel from '../js/skel.min.js';


(function ($) {
    skel.breakpoints ({
        xlarge: '(max-width: 1680px)',
        large: '(max-width: 1280px)',
        medium: '(max-width: 980px)',
        small: '(max-width: 736px)',
        xsmall: '(max-width: 480px)',
        'xlarge-to-max': '(min-width: 1681px)',
        'small-to-xlarge': '(min-width: 481px) and (max-width: 1680px)'
    });
.
.
.


但这总是向我显示以下错误:

Uncaught ReferenceError: skel is not defined
    at skel-layout.min.js (app.js? hash = e2c356f13dbdbc8f5ea02b405b7c429aff6b8bef: 699)
    at fileEvaluate (modules-runtime.js? hash = 8587d188e038b75ecd27ed2469a52b269e38fb62: 343)
    at require (modules-runtime.js? hash = 8587d188e038b75ecd27ed2469a52b269e38fb62: 238)
    at app.js? hash = e2c356f13dbdbc8f5ea02b405b7c429aff6b8bef: 1157


我试图移动文件,但它也不起作用。

我究竟做错了什么?

我的包裹:

# Meteor packages used by this project, one per line.
# Check this file (and the other files in this directory) into your repository.
#
# 'meteor add' and 'meteor remove' will edit this file for you,
# but you can also edit it by hand.

[email protected]             # Packages every Meteor app needs to have
[email protected]       # Packages for a great mobile UX
[email protected]                   # The database Meteor supports right now
[email protected] # Compile .html files into Meteor Blaze views
[email protected]            # Reactive variable for tracker
[email protected]                 # Meteor's client-side reactive programming library

[email protected]   # CSS minifier run for production mode
[email protected]    # JS minifier run for production mode
[email protected]                # ECMAScript 5 compatibility for older browsers
[email protected]              # Enable ECMAScript2015+ syntax in app code
[email protected]            # Server-side component of the `meteor shell` command

[email protected]                # Allow all DB writes from clients (for prototyping)
iron:router
twbs:bootstrap
rlespagnol:skeleton-css
johnantoni:meteor-skeleton
jquery
fourseven:scss


感谢

最佳答案

看起来问题不在于您发布的代码,但是当Meteor急切地加载文件时,它会执行两项操作。


它按字母顺序加载它们,因此skel-layoutskel.min之前运行,这是控制台中的错误。 skel.min需要首先运行。
它将它们包装在一个新的闭包中,因此它们不会污染全局名称空间。


除此之外,由于skel.min使用UMD模式,而Meteor使用common.js,它会在模块加载器中注册自身,以便可以使用require()调用它,而不是将自身加载到全局窗口中。

查看skel存储库,skel-layoutskel-viewport中的代码不使用UMD或尝试使用require()import skel,它只是希望它在当前范围内可用。

换一种说法。 Skel已经提高了一半的模块模式。

幸运的是,有一个快速修复。
将所有三个文件放在client/compatibility文件夹中,并在名称前加上加载顺序:

1-skel.min.js
2-skel-layout.min.js
3-skel-viewport.min.js


对于compatibility文件夹中的文件,Meteor不会将它们加载到新的闭包中,因此它们可以自由地污染全局范围。

10-06 04:16