【问题标题】:Issues when create a Meteor Package Wrapper for Libraries为库创建 Meteor 包包装器时的问题
【发布时间】:2015-04-01 06:27:01
【问题描述】:

我正在尝试为 switchery (https://github.com/abpetkov/switchery) 库制作一个流星包包装器。据我所知,我遵循了“官方指南”。

所以我做了一个 fork (https://github.com/mediatainment/switchery),在 fork 的根目录下创建了一个流星文件夹,并开始添加一些基本的东西来让它工作:

文件结构 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

package.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"
  }
}

package.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
});

流星/export.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

当我硬编码 VersionNumber 例如:“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)

提前多谢

【问题讨论】:

    标签: meteor npm


    【解决方案1】:

    IMO,你做错了。 基本上,您正在分叉 lib 的原始存储库并在那里进行更改以移植到流星中(基本上是制作 Meteor 包)。

    考虑这种情况,原始 lib repo(上游)已更新,但您已经在 Atomosphere 中发布了包,现在您想在 Meteor 中获取上游的更新代码,您可能无法在稍后的某个时间合并(可能是由于)。

    因此,将外部库集成为 Meteor 包的常用方法是将原始库存储库(上游)保留为 Meteor 包存储库的 git 子模块

    喜欢

    meteor-switchery
    - lib
    -- <original-lib-repo-git-submodule>
    -package.js
    -package.json
    

    你可以参考下面的包,集成为外部js库的meteor包,遵循我上面提到的方法

    Meteor bootstrap tagsinput

    Meteor Bootstrap TokenField

    并且您将与 package.json 中提到的版本的原始库相同的版本。 请不要这样做

    将其作为单独的版本本身。通过维护不同的版本,它可以灵活地更改版本,同时放置新版本的原始库或一些修复或升级一些依赖项等

    希望这会有所帮助。

    【讨论】:

    • 这也是我的第一个想法。但后来我完成了 MeteorCommunity github.com/MeteorCommunity/discussions/issues/14 的“官方包实现”。与此同时,我发现我做错了什么。我使用的是root 文件而不是/dist 文件。
    • 好吧酷,不知道这种努力只是为了将流星包移植到官方仓库中
    【解决方案2】:

    我的问题是,我使用的是外部库的 root 文件,而不是 /dist 文件夹中的文件。所以这是正确的方法:

    api.addFiles(['dist/switchery.js', 'dist/switchery.css', 'meteor/export.js'], where);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多