我正在开发一个大型JavaScript项目,该项目分为几个子模块,每个子模块都有自己的git存储库和Node依赖项.我们还有一个入口点模块App,它具有Webpack和ESLint配置.
由于大多数开发人员会相互协作处理几个模块,而不是等待每个模块发布,我们会使用npm link子模块连接到App模块,因此在开发期间对子模块的更改将立即生效对App模块可见.
我们遇到的问题eslint-loader不仅是App模块源代码,还有链接的所有子模块npm link.在lint子模块的代码时,eslint-loader无法解析子模块的本地路径.
我有办法解决这个问题吗?
以下是项目的示例结构:
--- App
| src
| node_modules
|- Sub_module_x
| src
| node_modules
|- Sub_module_y
src
node_modules
Run Code Online (Sandbox Code Playgroud)
以下是eslint-loader的相关部分webpack.config.js:
module: {
preloaders: [
{
test: /\.js$/,
loader: 'eslint-loader',
exclude: [
path.resolve(__dirname, 'node_modules', 'Sub_module_x'), // If this is commented, the loader would lint Sub_module_x, but cannot resolve any files which import other files
/node_modules/
]
}
]
}
Run Code Online (Sandbox Code Playgroud) 我使用创建了一个项目angular-cli。有一个AppModule,AppComponent我想在其他角度应用程序中使用AppModule它及其组件(AppComponent)。所以我创建了index.ts文件并导出了AppModule和AppComponent
export {AppModule} from './src/app/app.module';
export {AppComponent} from './src/app/app.component';
Run Code Online (Sandbox Code Playgroud)
然后使用创建本地链接,npm link并使用package.json中定义的名称创建一个链接。
现在在我要使用此导出模块的其他项目中运行
npm link project-name
Run Code Online (Sandbox Code Playgroud)
链接已成功完成。我试过了
import { AppModule as AModule} from 'my-components';
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为未解决引用,因此webpack无法编译AppModule文件。在SystemJs中,我们在systemjs.config.js文件中定义了此映射,但是没有配置文件。
我该如何解决?
还有其他重用本地模块的方法吗?
npm 5.8.0ProjectA和一个ProjectBProjectB 是一种依赖 ProjectA出于开发目的,我ProjectB在ProjectA的package.json中引用了"projectB": "file:../projectB".基本上我需要的唯一文件是在libWebpack的输出文件夹中.
如果我使用上面的配置安装此依赖项,npm将把整个文件ProjectB夹安装到node_modules中.它将包含所有projectB的node_modules,配置文件,src文件夹等.
除了这不能成为预期的行为之外,这会导致错误.例如,某些已安装的@types会抛出错误,因为它们被视为重复.@types和其他包来自ProjectA和ProjectB似乎"碰撞".这些软件包是作为参考的"dependencies"两个ProjectA及ProjectB居多.
如果我使用npm链接,则会出现相同的(见上文)行为.整个文件夹将安装到ProjectAnode_modules中.
我实际上有一个-file 可能很重要.所以,当我使用一个文件生成.如果我然后通过一切正常安装.我认为这确实考虑了-file..npmignoreProjectBnpm packprojectB.tgzProjectB"projectB": "file:../projectB.tgz"npm pack.npmignore
我对这个解决方案的问题在于,我不仅需要在ProjectB每次应用更改时进行构建,而且还需要构建npm pack.
ProjectBnode_modules我想这是最愚蠢的解决方法.如果我再次引用ProjectBvia "projectB": "file:../projectB"但在构建之后删除它的node_modules,则它们在安装后不会出现.因此,我没有任何例外.
我想这不是一个有效的解决方案,因为仍然ProjectB安装整个文件夹.
这里的最佳做法是什么?什么是合理的constallation …
我正在尝试为 Javascript 库构建一个 Angular 包装器,但出现“找不到模块”错误。Javascript 库正在开发中,尚未发布到 NPM,所以我使用的是 npm-link,这可能会导致问题,但我不确定。我的 Angular 版本是 8.2.2。
Javascript 源代码库
源库/index.js:
var sourcelib = (function () {
var doSomething = function() {
};
return {
doSomething: doSomething
};
})();
export default sourcelib;
Run Code Online (Sandbox Code Playgroud)
该sourcelib目录还包含的package.json和README.md文件。如您所料,创建了一个 npm-link:
cd sourcelib
npm link
Run Code Online (Sandbox Code Playgroud)
角度包装器
以下是我正在执行以创建 Angular 工作区、库和测试应用程序的 Angular CLI 命令:
ng new app-test --create-application=false
cd app-test
ng generate library testlib
ng generate application testlib-app
Run Code Online (Sandbox Code Playgroud)
现在将testlib链接到 Javascript 库:
cd projects/testlib
npm link sourcelib
Run Code Online (Sandbox Code Playgroud)
在testlib …
我正在努力使用 npm 链接。事实上我有两个本地包我想在我的项目中使用。
在我执行命令的每个包上sudo npm link 。当我这样做时,npm -g list我可以看到这些包及其参考。
当我在我的项目中创建一个时npm link <my-package-1>,这会在node_modules中添加我的第一个包的符号链接。到目前为止,一切都很好。
仅当我在我的项目中进行时npm link <my-package-2>。npm 首先从node_modules 中的第一个包中删除符号链接,然后创建指向node_modules 中第二个包的符号链接。我不知道为什么,但我的项目中不能有多个带有链接的包。
另外,当我对 node_modules 文件夹执行 ls 操作时,我发现符号链接定向到我的包文件夹,而不是全局 npm 的 node_modules 文件夹。
我错过了什么吗?我认为这正是 npm 链接与 npm i ../path/to/my/package 不同的原因。
谢谢你,美好的一天
看来,当我运行时npm link,它将全局安装项目,似乎用它安装devDependencies.
有没有办法在没有devDependencies的情况下运行npm链接,也许带有--only=production标志?
当我开发 JavaScript 模块时,我可以使用npm link在使用该模块作为依赖项的本地项目中安装我的本地开发版本。这是一个很棒的工作流程。
它不是就地开发,我认为这不如 TDD 好,但我认为它是进行集成测试和手动 QA 的一种更简单的方法。
在 Composer 中,如果可能的话,我可以强制使用 git 安装软件包,这样我就可以就地开发。不错,但不是很好。
问题的简短版本:我可以告诉 Composer 从本地文件系统中的 git 存储库/文件集临时安装依赖项,并从 Composer CLI 控制链接吗?
我创建了自己的 npm 包(使用 nwb 创建),其中使用了样式组件。在我的消费应用程序中,我还使用了样式组件。
问题是。通过 npm install. 但是,当npm link进入其他一些 react-router 路由时使用以下错误消息:
Error: Trying to insert a new style tag, but the given Node is unmounted!
* Are you using a custom target that isn't mounted?
* Does your document not have a valid head element?
* Have you accidentally removed a style tag manually?
Run Code Online (Sandbox Code Playgroud)
在我的 npm 包中,我将样式组件设置为对等依赖项和 devDependency,如下所示:
...
"peerDependencies": {
"react": "16.x",
"styled-components": "^3.4.4"
},
"devDependencies": {
"karma-junit-reporter": "^1.2.0",
"nwb": "0.23.x",
"react": "^16.4.2",
"react-dom": …Run Code Online (Sandbox Code Playgroud) 我正在编写一个 React 组件库,我想在其他项目中使用它,而无需太多开销(bit、create-react-library、generact 等)并且无需发布。我想用npm install ../shared_lib它作为符号链接添加到我的项目中/node_modules。此命令将符号链接添加到项目node_modules。在我的shared_lib中我只是进行了一个export default测试<div></div>:
import React from 'react';
const TryTest = function() {
return (
<div>
TryTest
</div>
)
}
export default TryTest;
Run Code Online (Sandbox Code Playgroud)
当我将组件导入我的工作项目时,我面临的问题是以下错误:
import TryTest from 'shared_lib';
Run Code Online (Sandbox Code Playgroud)
错误:
ERROR in ../shared_lib/src/index.js 6:4
Module parse failed: Unexpected token (6:4)
You may need an appropriate loader to handle this file type.
| const TryTest = function() {
| return (
> <div>
| TryTest
| </div>
@ ./src/App.js 27:0-33 …Run Code Online (Sandbox Code Playgroud) 我想使用 Nuxt 3 组件创建一个 npm 模块。为此,我按以下方式定义了“nuxt.js”文件。
import { join } from 'path'
import { defineNuxtModule} from '@nuxt/kit'
export default defineNuxtModule({
hooks: {
'components:dirs'(dirs){
dirs.push({
path: join(__dirname, 'components'),
prefix: 'my-name'
})
}
}
})
Run Code Online (Sandbox Code Playgroud)
当我发布模块然后运行 npm install my-module 时,没有问题。我可以使用 Nuxt 3 组件。但是,由于我还想测试一切是否按预期工作,因此我想使用 npm link 来测试模块而不发布它。
因此,我在两个目录中执行“npm link”,然后执行“npm link 'my-module'”。该模块已正确链接,我可以在我的“node-modules”目录中找到它。但是当运行“npm run dev”时,我收到以下错误:
错误无法启动 nuxt:找不到模块“@nuxt/kit”07:39:52 需要堆栈: - /path/my-module/nuxt.js 需要堆栈: - /path/my-module/nuxt.js 在 Function.Module._resolveFilename (内部/modules/cjs/loader.js:902:15) 在 Function.resolve (内部/模块/cjs/helpers.js:107:19) 在 _resolve (node_modules/jiti/dist/jiti.js:1:108226) 在 jiti (node_modules/jiti/dist/jiti.js:1:110413) 在/path/my-module/nuxt.js:2:12 在 jiti (node_modules/jiti/dist/jiti.js:1:112282) 在 requireModule (node_modules/@nuxt/kit/dist/index.mjs:295:26) 在 normalizeModule (node_modules/@nuxt/kit/dist/index.mjs:448:53) …
npm-link ×10
npm ×8
javascript ×3
webpack ×3
angular ×2
node.js ×2
reactjs ×2
angular-cli ×1
composer-php ×1
eslint ×1
nuxtjs3 ×1
php ×1
typescript ×1