我一直在使用神奇的“ browserify ”,它就像一个魅力。这是使用 Arunda的 NPM Atmosphere package或将 Npm.require 与 package.js一起使用的替代方案,可以说具有一些优势:
- 我的代码可以使用普通的旧“require”而不是 Npm.require 或 Meteor.require。显然这不是什么大问题,但如果我想在 Meteor 之外使用这段代码,感觉它不依赖于 Meteor 是件好事。
- 我不必担心 Meteor 是否会再次改变它对 Npm 集成的看法。
- 它允许我使用 npm 链接使用我自己的 npm 模块的本地开发版本。
以下是它的工作原理:
- 我在隐藏的 .npm 文件夹中为 npm 依赖项创建了一个单独的项目
- 我使用 browserify 创建一个 bundle.js 将由流星加载
- 我使用 grunt watch 确保每次安装新的 npm 包时,bundle.js 都会更新
这是我的目录结构:
my_meteor_project/
lib/
bundle.js
.npm/
node_modules
README.md
Gruntfile.js
entrypoint.js
package.json
这是 entrypoint.js 的示例(不幸的是,我必须使用全局变量,以便在 Meteor 代码中使用 assert、url 和 _)
assert = require('assert');
url = require("url");
_ = require('underscore');
这是 grunt 文件:
module.exports = function(grunt) {
grunt.initConfig({
watch: {
build: {
files: ['./entrypoint.js', './package.json'],
tasks: ['browserify2'],
options: {
}
}
},
browserify2: {
compile: {
entry: './entrypoint.js',
compile: '../lib/bundle.js'
}
},
});
grunt.loadNpmTasks('grunt-browserify2');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.registerTask('build', ['browserify2']);
};
然后我使用 grunt watch 来观察 entry.js 的变化或新的 NPM 安装
$ cd .npm
$ grunt watch:build &
[2] 44617
$ Running "watch:build" (watch) task
Waiting...
然后如果我安装一个 npm 模块,或者修改 entrypoint.js,bundle.js 会更新:
$ npm install url -save
npm http GET https://registry.npmjs.org/punycode
npm http GET https://registry.npmjs.org/querystring
npm http 304 https://registry.npmjs.org/punycode
npm http 304 https://registry.npmjs.org/querystring
url@0.7.9 node_modules/url
├── querystring@0.1.0
└── punycode@1.0.0
$ OK
>> File "package.json" changed.
Running "browserify2:compile" (browserify2) task
File written to: ../lib/bundle.js
Done, without errors.
Completed in 1.256s at Thu Jul 11 2013 11:36:22 GMT-0600 (MDT) - Waiting...