我正在尝试为交换机(https://github.com/abpetkov/switchery)库制作一个流星包包装器。据我了解,我遵循了"官方指南"。
所以我做了一个原始的分支(https://github.com/mediatainment/switchery),在分支的根目录中创建了一个 meteor 文件夹,并开始添加一些基本的东西来让它工作:
文件结构
root
|
|-meteor
| |-export.js
| |-tests.js
|-package.js // I found out that this must be in root
|-package.json // added devDependencies for my Package
|-switchery.js
|-switchery.css
包.json
{
"name": "switchery",
"version": "0.7.0",
"description": "Create iOS 7 styled switches from default input checkboxes",
"main": "switchery.js",
"repository": {
"type": "git",
"url": "git://github.com/abpetkov/switchery.git"
},
"author": "Alexander Petkov",
"license": "MIT",
"bugs": {
"url": "https://github.com/abpetkov/switchery/issues"
},
"devDependencies": {
"uglify-js": "~2.4.8",
"component": "^1.0.0",
"uglifycss": "0.0.7",
"grunt-exec": "latest",
"spacejam": "latest",
"jasmine-node": "latest",
"coffee-script": "latest"
}
}
包.js
// package metadata file for Meteor.js
'use strict';
var packageName = 'mediatainment:switchery'; // https://atmospherejs.com/mediatainment/switchery
var where = 'client'; // where to install: 'client' or 'server'. For both, pass nothing.
var packageJson = JSON.parse(Npm.require("fs").readFileSync('package.json'));
Package.describe({
name: packageName,
summary: 'Switchery (official) - turns your default HTML checkbox inputs into beautiful iOS 7 style switches in just few simple steps. Easy customizable to fit your design perfectly.',
version: "0.0.1", //packageJson.version,
git: 'https://github.com/mediatainment/switchery'
});
Package.onUse(function(api) {
api.versionsFrom(['METEOR@0.9.0', 'METEOR@1.0']);
api.export('Switchery');
api.addFiles(['switchery.js', 'switchery.css', 'meteor/export.js'], where);
});
Package.onTest(function(api) {
api.use(packageName, where);
api.use('tinytest', where);
api.addFiles('meteor/tests.js', where); // testing specific files
});
流星/出口.js
/*global Switchery:true*/ // Meteor creates a file-scope global for exporting. This comment prevents a potential JSHint warning.
Switchery= window.Switchery;
delete window.Switchery;
看起来很简单,但我有以下错误:
• 当我将本地包添加到空项目中时,这会导致
While reading package from `/Users/jan/WebstormProjects/packages/switchery`:
fs.js:438:18: ENOENT, no such file or directory 'package.json'
at Object.fs.openSync (fs.js:438:18)
at Object.fs.readFileSync (fs.js:289:15)
at package.js:7:48
当我对版本号进行硬编码时,例如:"0.0.1"并删除
var packageJson = JSON.parse(Npm.require("fs").readFileSync('package.json'));
此错误消失了,我可以启动该应用程序,但是• 控制台中出现新错误:
Uncaught ReferenceError: require is not defined
switchery.js:18 (anonymous function)
mediatainment_switchery.js (anonymous function) mediatainment_switchery.js? (anonymous function)
global-imports.js Uncaught TypeError: Cannot read property 'Switchery' of undefinedglobal-imports.js (anonymous function)
template.ptest.js Uncaught ReferenceError: Template is not definedtemplate.ptest.js(anonymous function)
template.ptest.js (anonymous function)
ptest.js Uncaught ReferenceError: Meteor is not defined
ptest.js (anonymous function)
ptest.js (anonymous function) application.js:23 No valid media id detected
要包含在我的包中的库只是一个 css 和 js 文件。
我做错了什么?(流星 1.0.3.1)
提前非常感谢
IMO,你做错了。基本上,您正在分叉库的原始存储库并在那里进行更改以移植到 meteor 中(基本上是制作 Meteor 包)。
考虑一下这样的情况,原始的lib repo(上游)得到了更新,但你已经在Atomosphere中发布了包,现在你想在Meteor中获取上游的更新代码,你可能无法在以后的某个时候合并(可能是由于)。
因此,将外部库集成为 Meteor 包的常见方法是将原始库存储库(上游)保留为 Meteor 包存储库的 git 子模块。
喜欢
meteor-switchery
- lib
-- <original-lib-repo-git-submodule>
-package.js
-package.json
您可以参考以下软件包,这些软件包集成为外部js库的meteor软件包,它遵循我上面提到的方法
流星引导标签输入
流星引导令牌字段
并且您正在放置与原始库相同的版本以及package.json中提到的版本。请不要这样做
将其本身作为单独的版本。通过维护不同的版本,它可以灵活地更改版本,同时放置原始库的新版本或一些修复程序,或者如果升级了一些依赖项等
希望这有帮助。
我的问题是,我使用的是外部库的root
文件,而不是/dist
文件夹中的文件。所以这是正确的方法:
api.addFiles(['dist/switchery.js', 'dist/switchery.css', 'meteor/export.js'], where);