汇总:如何要求json但不将其包含在包中

时间:2019-03-26 16:49:19

标签: node.js rollupjs

我的json脚本中某处需要一个node文件,但我希望将其与rollup捆绑在一起。我希望将其视为“外部”。每次json文件更改时,脚本都应该能够拾取更改,而无需逐级重建捆绑包。当前,它在捆绑包中是“硬编码的”:

// ./src/index.js
const json = require('../example.json');

./example.json为:

{
    "exampleValue": "X"
}

返回包含以下内容的捆绑包:

// ...
var exampleValue = "X";
var example = {
    exampleValue: exampleValue
};

var example$1 = /*#__PURE__*/Object.freeze({
    exampleValue: exampleValue,
    default: example
});
// ...

我尝试用rollup-plugin-json排除它,但正如我所料,它会抛出:

  

[!]错误:意外的令牌(请注意,您需要rollup-plugin-json才能导入JSON文件)

是否可以将json文件标记为外部文件,就像通过汇总配置文件中的externaloutput.paths属性标记外部程序包的方法一样?

1 个答案:

答案 0 :(得分:2)

rollup-plugin-json插件实际上为我完成了工作。这是我的配置文件rollup-config.js

import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import json from 'rollup-plugin-json';
import pkg from './package.json';

export default [
    // browser-friendly UMD build
    {
        input: './index.js',
        output: {
            file: '../index.js',
            name: 'Hy52fWS8r', // The global (never used) name for the factory of this UMD
            format: 'umd'
        },
        plugins: [
            resolve(),
            commonjs(),
            json({
                compact: true
            })
        ]
    }
];

源代码:

// test.json
[1, 2, 3]
// index.js
const test = require('./test.json')
console.log(test) // Array(3) [ 1, 2, 3 ]

rollup的输出如下:

var test = [1,2,3];

var test$1 = /*#__PURE__*/Object.freeze({
    'default': test
});

var test$2 = getCjsExportFromNamespace(test$1);

我还不知道这背后的原因是什么。您可以忽略test$1test$2变量。