17

我虽然在某处读到 package.json 的“main”属性可用于复制“dist”或部署所需的文件。我以为它有一个繁重的任务,但我没有看到任何可以帮助我或指导我的东西。我现在复制 node_modules 下的所有内容,但我当然不需要分发库示例代码,例如。

是否有关于如何正确使用 grunt-contrib-copy 的 grunt 任务或任何说明,希望从配置对象的标准 pkg 对象(解析的 package.json 文件)中复制来自 node_module 依赖项的文件?

4

2 回答 2

12

package.json 没有包含足够的信息让您知道要包含什么。您将不得不解析出所有require语句,但即便如此,您也无法检测到某些情况,例如模块加载资源等。

正确的做法是让包作者使用文件忽略不需要的.npmignore文件,甚至更好的是,使用 package.json 中的files属性来明确定义包中应包含哪些文件。

不幸的是,大多数包作者都很懒惰,不理会这些……

我鼓励您打开与该files属性相关的模块的 PR。

于 2013-08-15T09:55:10.903 回答
11

你可以:

1)使用复制任务将每个相关文件复制到dest目录:

copy:
  js:
    files: [
      { 
         expand: true, 
         cwd: 'node_modules/jquery', 
         src: 'jquery.min.js', 
         dest: 'www/js' 
      },
      { 
         expand: true, 
         cwd: 'node_modules/jquery-mobile-bower/js', 
         src: 'jquery.mobile-*.min.js', 
         dest: 'www/js' 
      }
    ]

jquery.min.js 和 jquery.mobile-xyzmin.js 都将被复制到 www/js 目录。

2) 使用 concat 任务将所有文件连接到单个 dest 文件(用于生成唯一的 javascript/样式表文件)

concat:
  options:
    separator: ';'
  js:
    dest: 'www/js/lib.js'
    src: [
      'node_modules/jquery/jquery.min.js',
      'node_modules/jquery-mobile-bower/js/jquery.mobile-*.min.js'
    ]

jquery.min.js 和 jquery.mobile-xyzmin.js 将合并到一个 www/js/lib.js 文件中,用分号分隔。

于 2013-10-05T04:24:27.417 回答