Простая строка require

#javascript

#javascript

Вопрос:

У меня есть небольшая программа nodejs, подобная следующей

 const angles = require('angles');
console.log(angles.difference(angles.degree(90), angles.degree(30));
 

И еще один небольшой файл библиотеки, angles.js

 function difference(a, b) {
  return a - b;
}
function degree(d) {
  return d;
}
module.exports = {difference: difference, degree: degree};
 

Как я могу встроить второй исходный файл в один объединенный, например, что-то вроде этого.

 const angles = function(module) {
  function difference(a, b) {
    return a - b;
  }
  function degree(d) {
    return d;
  }
  module.exports = {difference: difference, degree: degree};
}({}).exports;
console.log(angles.difference(angles.degree(90), angles.degree(30));
 

Я попробовал browserify, но он добавил много преамбулы с уродливым / уменьшенным кодом. Что, если я просто хочу что-то простое, как это? Как это можно сделать? Я понимаю, что есть много угловых случаев, которые вы можете создать там, где это невозможно, но давайте предположим, что программа, а также библиотечные файлы всегда так хорошо организованы, как это сделать? Есть ли подходящая библиотека?

Комментарии:

1. Почему бы просто не разделить их и не использовать модули так, как вы это делаете? Объединение кода узла в один файл на самом деле не является обычной практикой, поскольку он предположительно выполняется на сервере или в командной строке, поэтому нет никаких накладных расходов на его доставку по сети. Вы можете сделать это с помощью Gulp (или просто cat ), но это может привести к проблемам с конфликтующими идентификаторами.

2. Это для компилятора pascal -> js, поэтому было бы необходимо просто иметь что-то вроде этого. Я, вероятно, просто напишу что-нибудь сам, как план B. Проверьте это здесь: vidstige.github.io/pascaljs

3. О, очень интересно. Тогда я сообщу вам реальный ответ.

Ответ №1:

Rollup был бы хорошим средством для этого. Этот шаблон работает нормально, но может сделать больше, чем вам нужно. Эта конфигурация свертки barebones мало что делает для искажения:

 import commonjs from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';

export default [
    {
        input: 'src/index.js',
        output: [
            { file: './output.js', format: 'cjs' },
        ],
        plugins: [
            resolve(),
            commonjs()
        ]
    }
];
 

Если вы установите rollup и эти два плагина и добавите их в свой проект, вы можете запустить с rollup -c , и он создаст один пакет. Два плагина предназначены для работы модулей CJS, потому что Rollup хочет использовать ESM.

Это результат вашего кода с этой конфигурацией свертки:

 'use strict';

function difference(a, b) {
  return a - b;
}
function degree(d) {
  return d;
}
var angles = {difference: difference, degree: degree};

console.log(angles.difference(angles.degree(90), angles.degree(30)));
 

Ответ №2:

я надеюсь, что это будет полезно для вас:

 const angles = {
  difference: (a, b) => a - b,
  degree: (d) => d
};
console.log(angles.difference(angles.degree(90), angles.degree(30))); 

Комментарии:

1. Вопрос был о том, как автоматизировать встраивание подобным образом, а не копировать-вставлять ожидаемый результат.