强制 Browserify 转换依赖项?
Force Browserify to transform dependencies?
我同时处理两个 Node 包,我们称它们为 Library 和 Consumer。库负责在浏览器中渲染一堆东西。 Consumer 所做的只是 import Library from 'library'
并调用 Library(someConfigHere)
—— 它基本上只是一个测试,以确保 Library 在浏览器中执行我期望的操作。
我已经 npm link
将 Library 编辑到 Consumer 中,并试图 运行 Browserify on Consumer,但我收到此错误:ParseError: 'import' and 'export' may appear only with 'sourceType: module'
。 Library 确实包含一个 ES6 export
语句,所以我猜测 Browserify 只是 运行 反对 Consumer 而不是 Library。
所以我的问题是:有什么方法可以强制 Browserify 也转换依赖项?
这是我的 package.json
:
{
"name": "consumer",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "budo index.js --port $PORT",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"babel-preset-es2015": "^6.13.2",
"babel-preset-react": "^6.11.1",
"babelify": "^7.3.0",
"browserify-shim": "^3.8.12"
},
"browserify": {
"transform": [
"babelify"
]
},
"babel": {
"presets": [
"es2015",
"react"
]
}
}
这是消费者的index.js
:
import Library from 'library' // <= this is what isn't getting babelified
console.log(Library);
这是图书馆的 index.js
:
export default (config) => {
console.log('Testing testing')
}
Browserify 转换可以配置为全局转换,这意味着它们也将应用于 node_modules
内的文件。
配置是每次转换。使用 babelify,你可以这样配置它:
browserify().transform("babelify", {
global: true
})
或者,如果您使用命令行,如下所示:
browserify ... -t [ babelify --global ] ...
或者,要在 package.json
中配置它,它应该是这样的(注意添加的方括号):
"browserify": {
"transform": [
["babelify", { "global": true }]
]
}
Babelify 还实现了一个 ignore
选项,因此可以将其配置为仅转换 node_modules
中您想要的文件。还有更多信息here。
另一种解决方案是在 library
模块的 package.json
中包含类似的 browserify
/babelify
配置。在处理依赖项时,Browserify 将检查所述依赖项的 pacakge.json
文件以进行转换,并将应用任何已配置的文件。
我同时处理两个 Node 包,我们称它们为 Library 和 Consumer。库负责在浏览器中渲染一堆东西。 Consumer 所做的只是 import Library from 'library'
并调用 Library(someConfigHere)
—— 它基本上只是一个测试,以确保 Library 在浏览器中执行我期望的操作。
我已经 npm link
将 Library 编辑到 Consumer 中,并试图 运行 Browserify on Consumer,但我收到此错误:ParseError: 'import' and 'export' may appear only with 'sourceType: module'
。 Library 确实包含一个 ES6 export
语句,所以我猜测 Browserify 只是 运行 反对 Consumer 而不是 Library。
所以我的问题是:有什么方法可以强制 Browserify 也转换依赖项?
这是我的 package.json
:
{
"name": "consumer",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "budo index.js --port $PORT",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"babel-preset-es2015": "^6.13.2",
"babel-preset-react": "^6.11.1",
"babelify": "^7.3.0",
"browserify-shim": "^3.8.12"
},
"browserify": {
"transform": [
"babelify"
]
},
"babel": {
"presets": [
"es2015",
"react"
]
}
}
这是消费者的index.js
:
import Library from 'library' // <= this is what isn't getting babelified
console.log(Library);
这是图书馆的 index.js
:
export default (config) => {
console.log('Testing testing')
}
Browserify 转换可以配置为全局转换,这意味着它们也将应用于 node_modules
内的文件。
配置是每次转换。使用 babelify,你可以这样配置它:
browserify().transform("babelify", {
global: true
})
或者,如果您使用命令行,如下所示:
browserify ... -t [ babelify --global ] ...
或者,要在 package.json
中配置它,它应该是这样的(注意添加的方括号):
"browserify": {
"transform": [
["babelify", { "global": true }]
]
}
Babelify 还实现了一个 ignore
选项,因此可以将其配置为仅转换 node_modules
中您想要的文件。还有更多信息here。
另一种解决方案是在 library
模块的 package.json
中包含类似的 browserify
/babelify
配置。在处理依赖项时,Browserify 将检查所述依赖项的 pacakge.json
文件以进行转换,并将应用任何已配置的文件。