使用require修复的es6导入问题

时间:2016-10-05 08:31:40

标签: jquery twitter-bootstrap import ecmascript-6 require

鉴于以下代码,我使用以下代码启动了bootstrap.js文件:

import jQuery from 'jquery';

// jQuery
window.$ = window.jQuery = jQuery;

// Twitter bootstrap
import 'bootstrap-sass/assets/javascripts/bootstrap';

// Initialize theme
import './theme/bootstrap';

当我编译它(使用webpack)并在浏览器中运行时,我从bootstrap得到了以下抱怨:'我需要jQuery才能工作......'

我没有(并且仍然没有)理解为什么没有导入jQuery,我将它设置为bootstrap上面的全局窗口对象1规则。

但是当我更改我的代码并删除所有导入时:

// jQuery
window.$ = window.jQuery = require('jquery');

// Twitter bootstrap
require('bootstrap-sass/assets/javascripts/bootstrap');

// Initialize theme
require('./theme/bootstrap');

这段代码运行得非常好,一切都按预期工作,但我一直认为导入和需求基本相同,导入只是转换为需要调用。显然情况并非如此,有人可以向我解释这里到底发生了什么,以及为什么需要在导入时不起作用?

1 个答案:

答案 0 :(得分:0)

在文件开始执行之前处理

import语句,这意味着相对于文件本身中的代码的import语句的排序将不起作用。另一方面,require调用只是函数调用,因此排序有效。

在第一个示例中,所有导入都将在window.$ = window.jQuery = jQuery;行运行之前执行。