@prismicio/babel-transform-config
Version:
Transform JS config files (Next, Nuxt, Gatsby)
126 lines (100 loc) ⢠3.13 kB
Markdown
If you ever wanted to update a Nuxt or Next config file programmatically.
Simplest way to understand what it does:
````bash
git clone https://github.com/prismicio/babel-transform-config;
cd babel-transform-config && npm install;
node examples/nuxt.simple.js
````
This should display some info š
The actual `nuxt.config.js` file that was read from file.
Something like:
```javascript
export default {
css: [],
modules: ['@org/my-nuxt-module'],
build: {
webpack : {}
},
};
````
The arguments that were passed to `babel-transform-config`.
Something like:
```javascript
const args = {
css: ['path/to/file'],
modules: [
['my-module', { config: true }]
],
transpile: ['my-other-module']
}
// will be used like this:
// transformConfig(code, 'nuxt', args)
````
What you came for:
```javascript
export default {
css: ["path/to/file"],
modules: ['@org/my-nuxt-module', ["my-module", {
"config": true
}]],
build: {
webpack: {},
transpile: ["my-other-module"]
}
};
````
This package exports a `transformConfig` function that takes as arguments some code, a framework key, and key-value params that will help the module transform these arguments.
For example, these arguments:
````javascript
const args = {
script: ['path/to/script-file.js']
}
transformConfig(myNuxtConfig, 'nuxt', args)
````
`transformConfig` will try & match your script key and transform your arguments into:
````javascript
transforms: [{
'head:script': {
action: 'create:merge',
value: ['path/to/script-file.js']
}
],
````
This will help the underlying Babel plugin perform the right actions, based on what it knows of your framework. The complete call:
````javascript
const fs = require('fs')
const transformConfig = require('babel-transform-config')
const code = fs.readFileSync('path/to/config', 'utf8')
const args = { script: ['path/to/script-file.js'] }
const { code: updatedCode} = transformConfig(code, 'nuxt', args)
// ā ļø this is experimental, please log things first
fs.writeFileSync('path/to/config', updatedCode, 'utf8')
````
Right now, `transformConfig` only supports Nuxt framexwork. If you want to use things for yourself with another framework, you should use the lower-level transform method:
```javascript
const { transform } = require('babel-transform-config')
const transforms = {
'head:script': { // create or replace export default { head: { script: [] }}
action: 'create:replace',
value: ['my/script.js']
},
'deleteMe': { // delete export default { deleteMe: ... }
action: 'delete'
},
'build:transpile': { // merges export default { babel: { transpile: arrayOrObject } }
action: 'merge',
value: ['path/to/file']
}
}
const { code: updatedCode } = transform(yourCustomCode, transforms)
`````
š See `examples/transform`.
This package does not work well with nested elements, especially when object patterns are similar.