在多个 CommonJS 模块中定义全局变量而不是在每个需要依赖项的文件中使用 require() 语句通常是一个坏主意。
CommonJS 背后的想法是完全定义理论上可以从项目中添加或删除的单元,并且仍然很清楚它们具有哪些依赖项以及它们所在的位置。
如果您查看链接的 Github 存储库,您会注意到作者在每个存储库中都使用了单独的 import React from 'react' 语句,而它们都依赖于它。虽然它可能看起来只是在文件顶部添加了可以由全局变量清理的不必要的混乱,但我喜欢认为它作为文档提供了有关此特定组件所依赖的重要信息。
幸运的是,像 Webpack 和 Browserify 这样的工具可以轻松地将多个组件及其依赖项捆绑到一个文件中,因此几乎不需要将 jQuery 作为全局变量包含在内。
我建议将 jQuery 安装为 npm 模块。
npm install jquery --save
然后,您只需在需要使用它的每个文件中执行var $ = require('jquery')。
完成后,您可以使用 Browserify 之类的工具来捆绑您的组件和依赖项,然后使用 <script> 标签将其导入您的 index.html。只需将 Browserify 指向入口点(您的主组件),然后让它完成剩下的工作。像 Gulp 这样的构建工具将允许您使用简单的gulp build 命令执行整个过程。这是一个示例 Gulpfile,可帮助您入门:
var gulp = require('gulp');
var uglify = require('gulp-uglify');
var source = require('vinyl-source-stream');
var browserify = require('browserify');
var reactify = require('reactify');
var streamify = require('gulp-streamify');
gulp.task('build', function () {
browserify({
entries : 'path/to/mainComponent.js', //where your main component lives
transform : [reactify] //transform jsx
})
.bundle()
.pipe(source('bundle.js')) //create file named 'bundle.js'
.pipe(streamify(uglify('bundle.js'))) //minify
.pipe(gulp.dest('path/to/destination')); //where you want your 'bundle.js' to be placed
});
在使用这个之前,你会想要做
npm install gulp-uglify vinyl-source-stream browserify reactify gulp-streamify --save-dev
和
npm install gulp-cli -g
希望这会有所帮助!